aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Annex/Branch.hs12
-rw-r--r--Remote/Git.hs16
-rw-r--r--debian/changelog6
3 files changed, 25 insertions, 9 deletions
diff --git a/Annex/Branch.hs b/Annex/Branch.hs
index aea0d2bff..24da8120c 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 5d31770a2..e77b00572 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 81dec6ad0..b17de57ff 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 <joeyh@debian.org> 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