diff --git a/Annex/Branch.hs b/Annex/Branch.hs index aea0d2bffe..24da8120c4 100644 --- a/Annex/Branch.hs +++ b/Annex/Branch.hs @@ -8,6 +8,7 @@ module Annex.Branch ( create, update, + disableUpdate, get, change, commit, @@ -136,7 +137,7 @@ update = onceonly $ do c <- filterM changedbranch =<< siblingBranches let (refs, branches) = unzip c unless (not dirty && null refs) $ withIndex $ lockJournal $ do - when dirty $ stageJournalFiles + when dirty stageJournalFiles g <- gitRepo unless (null branches) $ do showSideAction $ "merging " ++ @@ -164,8 +165,15 @@ update = onceonly $ do return $ not $ L.null diffs onceonly a = unlessM (branchUpdated <$> getState) $ do r <- a - Annex.changeState setupdated + disableUpdate return r + +{- Avoids updating the branch. A useful optimisation when the branc + - is known to have not changed, or git-annex won't be relying on info + - from it. -} +disableUpdate :: Annex () +disableUpdate = Annex.changeState setupdated + where setupdated s = s { Annex.branchstate = new } where new = old { branchUpdated = True } diff --git a/Remote/Git.hs b/Remote/Git.hs index 5d31770a22..e77b005725 100644 --- a/Remote/Git.hs +++ b/Remote/Git.hs @@ -19,6 +19,7 @@ import qualified Git import qualified Annex import Annex.UUID import qualified Annex.Content +import qualified Annex.Branch import qualified Utility.Url as Url import Utility.TempFile import Config @@ -133,7 +134,7 @@ inAnnex r key | Git.repoIsUrl r = checkremote | otherwise = safely checklocal where - checklocal = onLocal r (Annex.Content.inAnnex key) + checklocal = onLocal r $ Annex.Content.inAnnex key checkremote = do showAction $ "checking " ++ Git.repoDescribe r inannex <- onRemote r (boolSystem, False) "inannex" @@ -147,7 +148,11 @@ inAnnex r key onLocal :: Git.Repo -> Annex a -> IO a onLocal r a = do annex <- Annex.new r - Annex.eval annex a + Annex.eval annex $ do + -- No need to update the branch; its data is not used + -- for anything onLocal is used to do. + Annex.Branch.disableUpdate + a keyUrl :: Git.Repo -> Key -> String keyUrl r key = Git.repoLocation r ++ "/" ++ annexLocation key @@ -175,11 +180,8 @@ copyToRemote r key g <- gitRepo let keysrc = gitAnnexLocation g key -- run copy from perspective of remote - liftIO $ onLocal r $ do - ok <- Annex.Content.getViaTmp key $ - rsyncOrCopyFile r keysrc - Annex.Content.saveState - return ok + liftIO $ onLocal r $ Annex.Content.getViaTmp key $ + rsyncOrCopyFile r keysrc | Git.repoIsSsh r = do g <- gitRepo let keysrc = gitAnnexLocation g key diff --git a/debian/changelog b/debian/changelog index 81dec6ad06..b17de57ff5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +git-annex (3.20111026) UNRELEASED; urgency=low + + * Sped up some operations on remotes that are on the same host. + + -- Joey Hess Thu, 27 Oct 2011 13:58:53 -0400 + git-annex (3.20111025) unstable; urgency=low * A remote can have a annexUrl configured, that is used by git-annex