]> dgit.raspbian.org Git - git-annex.git/commitdiff
avoid redundant adjusted branch update in sync
authorJoey Hess <joeyh@joeyh.name>
Mon, 16 Nov 2020 19:13:48 +0000 (15:13 -0400)
committerJoey Hess <joeyh@joeyh.name>
Mon, 16 Nov 2020 19:13:48 +0000 (15:13 -0400)
sync still does update it if the config would otherwise not, since it
already did.

Annex/AdjustedBranch.hs
Command/Sync.hs

index ea79a7f180cf618aae0f5b53fdf29120d15259c4..10715bc2276c3f8b5faf1e5f4042664ea72f3984 100644 (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 ()
        
@@ -309,20 +309,26 @@ adjustedBranchRefresh _af a = do
                            !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
index 966cba340e6a01f889d38095d8bf2a65f28539d5..fb37a087e5d9250da0913a23f3e3d54d7e1d0d20 100644 (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