2011-06-22 19:58:30 +00:00
|
|
|
{- git-annex BranchState data type
|
|
|
|
-
|
2020-07-06 16:09:53 +00:00
|
|
|
- Copyright 2011-2020 Joey Hess <id@joeyh.name>
|
2011-06-22 19:58:30 +00:00
|
|
|
-
|
2019-03-13 19:48:14 +00:00
|
|
|
- Licensed under the GNU AGPL version 3 or higher.
|
2011-06-22 19:58:30 +00:00
|
|
|
-}
|
|
|
|
|
|
|
|
module Types.BranchState where
|
|
|
|
|
2020-07-06 16:09:53 +00:00
|
|
|
import Common
|
|
|
|
|
|
|
|
import qualified Data.ByteString.Lazy as L
|
|
|
|
|
2012-12-20 03:41:54 +00:00
|
|
|
data BranchState = BranchState
|
2020-04-09 17:54:43 +00:00
|
|
|
{ branchUpdated :: Bool
|
|
|
|
-- ^ has the branch been updated this run?
|
|
|
|
, indexChecked :: Bool
|
|
|
|
-- ^ has the index file been checked to exist?
|
|
|
|
, journalIgnorable :: Bool
|
|
|
|
-- ^ can reading the journal be skipped, while still getting
|
|
|
|
-- sufficiently up-to-date information from the branch?
|
cache one more log file for metadata
My worry was that a preferred content expression that matches on metadata
would have removed the location log from cache, causing an expensive
re-read when a Seek action later checked the location log.
Especially when the --all optimisation in the previous commit
pre-cached the location log.
This also means that the --all optimisation could cache the metadata log
too, if it wanted too, but not currently done.
The cache is a list, with the most recently accessed file first. That
optimises it for the common case of reading the same file twice, eg a
get, examine, followed by set reads it twice. And sync --content reads the
location log 3 times in a row commonly.
But, as a list, it should not be made to be too long. I thought about
expanding it to 5 items, but that seemed unlikely to be a win commonly
enough to outweigh the extra time spent checking the cache.
Clearly there could be some further benchmarking and tuning here.
2020-07-07 18:18:55 +00:00
|
|
|
, cachedFileContents :: [(RawFilePath, L.ByteString)]
|
|
|
|
-- ^ contents of a few files recently read from the branch
|
2020-07-06 16:09:53 +00:00
|
|
|
, needInteractiveAccess :: Bool
|
|
|
|
-- ^ do new changes written to the journal or branch by another
|
|
|
|
-- process need to be noticed while the current process is running?
|
|
|
|
-- (This makes the journal always be read, and avoids using the
|
|
|
|
-- cache.)
|
2012-12-20 03:41:54 +00:00
|
|
|
}
|
2011-06-22 19:58:30 +00:00
|
|
|
|
|
|
|
startBranchState :: BranchState
|
cache one more log file for metadata
My worry was that a preferred content expression that matches on metadata
would have removed the location log from cache, causing an expensive
re-read when a Seek action later checked the location log.
Especially when the --all optimisation in the previous commit
pre-cached the location log.
This also means that the --all optimisation could cache the metadata log
too, if it wanted too, but not currently done.
The cache is a list, with the most recently accessed file first. That
optimises it for the common case of reading the same file twice, eg a
get, examine, followed by set reads it twice. And sync --content reads the
location log 3 times in a row commonly.
But, as a list, it should not be made to be too long. I thought about
expanding it to 5 items, but that seemed unlikely to be a win commonly
enough to outweigh the extra time spent checking the cache.
Clearly there could be some further benchmarking and tuning here.
2020-07-07 18:18:55 +00:00
|
|
|
startBranchState = BranchState False False False [] False
|