fromAdjustedBranch,
getAdjustment,
enterAdjustedBranch,
- updateAdjustedBranch,
adjustedBranchRefresh,
+ adjustedBranchRefreshFull,
adjustBranch,
adjustTree,
adjustToCrippledFileSystem,
ifM (checkcounter n)
( update adj origbranch
, Annex.addCleanup AdjustedBranchUpdate $
- update adj origbranch
+ adjustedBranchRefreshFull adj origbranch
)
_ -> return ()
!c' = if enough then 0 else c
!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
- let adjbranch = originalToAdjusted origbranch adj
- void $ updateAdjustedBranch adj adjbranch origbranch
+ -- 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
+ unlessM (updateAdjustedBranch adj adjbranch origbranch) $
+ warning $ unwords [ "Updating adjusted branch failed." ]
adjustToCrippledFileSystem :: Annex ()
adjustToCrippledFileSystem = do
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