disable journal read optimisation when alwayscommit=false
The journal read optimisation inaeca7c220
later got fixed ineedd73b84
to stage and commit any files that were left in the journal by a previous git-annex run. That's necessary for the optimisation to work correctly. But it also meant that alwayscommit=false started committing the previous git-annex processes journalled changes, which defeated the purpose of the config setting entirely. So, disable the optimisation when alwayscommit=false, leaving the files in the journal and not committing them. See my comments on the bug report for why this seemed the best approach. Also fixes a problem when annex.merge-annex-branches=false and there are changes in the journal. That config indirectly prevents committing the journal. (Which seems a bit odd given its name, but it always has..) So, when there were changes in the journal, perhaps left there due to alwayscommit=false being set before, the optimisation would prevent git-annex from reading the journal files, and it would operate with out of date information.
This commit is contained in:
parent
0e4c92503e
commit
43a9808292
5 changed files with 46 additions and 26 deletions
|
@ -1,6 +1,6 @@
|
|||
{- management of the git-annex branch
|
||||
-
|
||||
- Copyright 2011-2019 Joey Hess <id@joeyh.name>
|
||||
- Copyright 2011-2020 Joey Hess <id@joeyh.name>
|
||||
-
|
||||
- Licensed under the GNU AGPL version 3 or higher.
|
||||
-}
|
||||
|
@ -14,6 +14,7 @@ module Annex.Branch (
|
|||
hasSibling,
|
||||
siblingBranches,
|
||||
create,
|
||||
UpdateMade(..),
|
||||
update,
|
||||
forceUpdate,
|
||||
updateTo,
|
||||
|
@ -125,12 +126,17 @@ getBranch = maybe (hasOrigin >>= go >>= use) return =<< branchsha
|
|||
{- Ensures that the branch and index are up-to-date; should be
|
||||
- called before data is read from it. Runs only once per git-annex run. -}
|
||||
update :: Annex BranchState
|
||||
update = runUpdateOnce $ void $ updateTo =<< siblingBranches
|
||||
update = runUpdateOnce $ journalClean <$$> updateTo =<< siblingBranches
|
||||
|
||||
{- Forces an update even if one has already been run. -}
|
||||
forceUpdate :: Annex Bool
|
||||
forceUpdate :: Annex UpdateMade
|
||||
forceUpdate = updateTo =<< siblingBranches
|
||||
|
||||
data UpdateMade = UpdateMade
|
||||
{ refsWereMerged :: Bool
|
||||
, journalClean :: Bool
|
||||
}
|
||||
|
||||
{- Merges the specified Refs into the index, if they have any changes not
|
||||
- already in it. The Branch names are only used in the commit message;
|
||||
- it's even possible that the provided Branches have not been updated to
|
||||
|
@ -149,13 +155,13 @@ forceUpdate = updateTo =<< siblingBranches
|
|||
-
|
||||
- Returns True if any refs were merged in, False otherwise.
|
||||
-}
|
||||
updateTo :: [(Git.Sha, Git.Branch)] -> Annex Bool
|
||||
updateTo :: [(Git.Sha, Git.Branch)] -> Annex UpdateMade
|
||||
updateTo pairs = ifM (annexMergeAnnexBranches <$> Annex.getGitConfig)
|
||||
( updateTo' pairs
|
||||
, return False
|
||||
, return (UpdateMade False False)
|
||||
)
|
||||
|
||||
updateTo' :: [(Git.Sha, Git.Branch)] -> Annex Bool
|
||||
updateTo' :: [(Git.Sha, Git.Branch)] -> Annex UpdateMade
|
||||
updateTo' pairs = do
|
||||
-- ensure branch exists, and get its current ref
|
||||
branchref <- getBranch
|
||||
|
@ -167,7 +173,7 @@ updateTo' pairs = do
|
|||
else do
|
||||
mergedrefs <- getMergedRefs
|
||||
filterM isnewer (excludeset mergedrefs unignoredrefs)
|
||||
if null tomerge
|
||||
journalclean <- if null tomerge
|
||||
{- Even when no refs need to be merged, the index
|
||||
- may still be updated if the branch has gotten ahead
|
||||
- of the index, or just if the journal is dirty. -}
|
||||
|
@ -179,11 +185,23 @@ updateTo' pairs = do
|
|||
- a commit needs to be done. -}
|
||||
when dirty $
|
||||
go branchref dirty [] jl
|
||||
, when dirty $
|
||||
lockJournal $ go branchref dirty []
|
||||
return True
|
||||
, if dirty
|
||||
then ifM (annexAlwaysCommit <$> Annex.getGitConfig)
|
||||
( do
|
||||
lockJournal $ go branchref dirty []
|
||||
return True
|
||||
, return False
|
||||
)
|
||||
else return True
|
||||
)
|
||||
else lockJournal $ go branchref dirty tomerge
|
||||
return $ not $ null tomerge
|
||||
else do
|
||||
lockJournal $ go branchref dirty tomerge
|
||||
return True
|
||||
return $ UpdateMade
|
||||
{ refsWereMerged = not (null tomerge)
|
||||
, journalClean = journalclean
|
||||
}
|
||||
where
|
||||
excludeset s = filter (\(r, _) -> S.notMember r s)
|
||||
isnewer (r, _) = inRepo $ Git.Branch.changed fullname r
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue