avoid redundant adjusted branch update in sync

sync still does update it if the config would otherwise not, since it
already did.
This commit is contained in:
Joey Hess 2020-11-16 15:13:48 -04:00
parent 805af01562
commit 631c8d3e5b
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
2 changed files with 22 additions and 16 deletions

View file

@ -21,8 +21,8 @@ module Annex.AdjustedBranch (
fromAdjustedBranch,
getAdjustment,
enterAdjustedBranch,
updateAdjustedBranch,
adjustedBranchRefresh,
adjustedBranchRefreshFull,
adjustBranch,
adjustTree,
adjustToCrippledFileSystem,
@ -296,7 +296,7 @@ adjustedBranchRefresh _af a = do
ifM (checkcounter n)
( update adj origbranch
, Annex.addCleanup AdjustedBranchUpdate $
update adj origbranch
adjustedBranchRefreshFull adj origbranch
)
_ -> return ()
@ -310,19 +310,25 @@ adjustedBranchRefresh _af a = do
!s' = s { Annex.adjustedbranchrefreshcounter = c' }
in pure (s', enough)
-- TODO This is very slow when run a lot of times.
-- Incrementally adjust only the AssociatedFile.
-- However, this should be run once at shutdown then,
-- because other files than the provided AssociatedFile
-- can need to be updated in some edge cases.
update adj origbranch = do
-- Flush the queue, to make any pending changes be written
-- out to disk. But mostly so any pointer files
-- restagePointerFile was called on get updated so git
-- checkout won't fall over.
Annex.Queue.flush
-- This is slow, it would be better to incrementally
-- adjust the AssociatedFile, and only call this once
-- at shutdown to handle cases where not all
-- AssociatedFiles are known.
adjustedBranchRefreshFull adj origbranch
{- Slow, but more dependable version of adjustedBranchRefresh that
- does not rely on all AssociatedFiles being known. -}
adjustedBranchRefreshFull :: Adjustment -> OrigBranch -> Annex ()
adjustedBranchRefreshFull adj origbranch = do
let adjbranch = originalToAdjusted origbranch adj
void $ updateAdjustedBranch adj adjbranch origbranch
unlessM (updateAdjustedBranch adj adjbranch origbranch) $
warning $ unwords [ "Updating adjusted branch failed." ]
adjustToCrippledFileSystem :: Annex ()
adjustToCrippledFileSystem = do

View file

@ -407,17 +407,17 @@ updateBranches (Nothing, _) = noop
updateBranches (Just branch, madj) = do
-- When in an adjusted branch, propigate any changes made to it
-- back to the original branch. The adjusted branch may also need
-- to be updated, if the adjustment is not stable.
-- to be updated, if the adjustment is not stable, and the usual
-- configuration does not update it.
case madj of
Nothing -> noop
Just adj -> do
let origbranch = branch
propigateAdjustedCommits origbranch adj
unless (adjustmentIsStable adj) $ do
showSideAction "updating adjusted branch"
let adjbranch = originalToAdjusted origbranch adj
unlessM (updateAdjustedBranch adj adjbranch origbranch) $
warning $ unwords [ "Updating adjusted branch failed." ]
unless (adjustmentIsStable adj) $
annexAdjustedBranchRefresh <$> Annex.getGitConfig >>= \case
0 -> adjustedBranchRefreshFull adj origbranch
_ -> return ()
-- Update the sync branch to match the new state of the branch
inRepo $ updateBranch (syncBranch branch) branch