fix --all to include not yet committed files from the journal
Fix bug caused by recent optimisations that could make git-annex not see recently recorded status information when configured with annex.alwayscommit=false. This does mean that --all can end up processing the same key more than once, but before the optimisations that introduced this bug, it used to also behave that way. So I didn't try to fix that; it's an edge case and anyway git-annex behaves well when run on the same key repeatedly. I am not too happy with the use of a MVar to buffer the list of files in the journal. I guess it doesn't defeat lazy streaming of the list, if that list is actually generated lazily, and anyway the size of the journal is normally capped and small, so if configs are changed to make it huge and this code path fire, git-annex using enough memory to buffer it all is not a large problem.
This commit is contained in:
parent
74acf17a31
commit
653b719472
4 changed files with 55 additions and 30 deletions
|
@ -276,7 +276,7 @@ withKeyOptions' ko auto mkkeyaction fallbackaction worktreeitems = do
|
|||
let discard reader = reader >>= \case
|
||||
Nothing -> noop
|
||||
Just _ -> discard reader
|
||||
let go reader = liftIO reader >>= \case
|
||||
let go reader = reader >>= \case
|
||||
Just (k, f, content) -> checktimelimit (discard reader) $ do
|
||||
maybe noop (Annex.Branch.precache f) content
|
||||
keyaction Nothing (SeekInput [], k, mkActionItem k)
|
||||
|
@ -373,7 +373,7 @@ seekFilteredKeys seeker listfs = do
|
|||
liftIO $ void cleanup
|
||||
where
|
||||
finisher mi oreader checktimelimit = liftIO oreader >>= \case
|
||||
Just ((si, f), content) -> checktimelimit discard $ do
|
||||
Just ((si, f), content) -> checktimelimit (liftIO discard) $ do
|
||||
keyaction f mi content $
|
||||
commandAction . startAction seeker si f
|
||||
finisher mi oreader checktimelimit
|
||||
|
@ -384,7 +384,7 @@ seekFilteredKeys seeker listfs = do
|
|||
Just _ -> discard
|
||||
|
||||
precachefinisher mi lreader checktimelimit = liftIO lreader >>= \case
|
||||
Just ((logf, (si, f), k), logcontent) -> checktimelimit discard $ do
|
||||
Just ((logf, (si, f), k), logcontent) -> checktimelimit (liftIO discard) $ do
|
||||
maybe noop (Annex.Branch.precache logf) logcontent
|
||||
checkMatcherWhen mi
|
||||
(matcherNeedsLocationLog mi && not (matcherNeedsFileName mi))
|
||||
|
@ -591,9 +591,9 @@ notSymlink :: RawFilePath -> IO Bool
|
|||
notSymlink f = liftIO $ not . isSymbolicLink <$> R.getSymbolicLinkStatus f
|
||||
|
||||
{- Returns an action that, when there's a time limit, can be used
|
||||
- to check it before processing a file. The IO action is run when over the
|
||||
- time limit. -}
|
||||
mkCheckTimeLimit :: Annex (IO () -> Annex () -> Annex ())
|
||||
- to check it before processing a file. The first action is run when over the
|
||||
- time limit, otherwise the second action is run. -}
|
||||
mkCheckTimeLimit :: Annex (Annex () -> Annex () -> Annex ())
|
||||
mkCheckTimeLimit = Annex.getState Annex.timelimit >>= \case
|
||||
Nothing -> return $ \_ a -> a
|
||||
Just (duration, cutoff) -> return $ \cleanup a -> do
|
||||
|
@ -602,6 +602,6 @@ mkCheckTimeLimit = Annex.getState Annex.timelimit >>= \case
|
|||
then do
|
||||
warning $ "Time limit (" ++ fromDuration duration ++ ") reached! Shutting down..."
|
||||
shutdown True
|
||||
liftIO cleanup
|
||||
cleanup
|
||||
liftIO $ exitWith $ ExitFailure 101
|
||||
else a
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue