From 9f20aee2192bcc5f2c0ae1f59db88f6eadeb7335 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 3 Mar 2011 15:22:53 -0400 Subject: avoid logging to location log when in a bare repo This assumes that changes to content in bare repos are made from some non-bare repo, and that the location log is updated on that side. That's true for move --from and move --to. It's *not* true for dropkey and setkey and recvkey. But those are plumbing level commands, so I guess it's ok to assume that someone running those in a bare repo knows what they're doing. And git-annex-shell is used to run those, and if the bare repo is non-local, it needs to be able to use them even though they cannot update the location log. So this seems unavoidable. --- Command/Move.hs | 5 +++++ Content.hs | 16 +++++++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/Command/Move.hs b/Command/Move.hs index 8c19539fb..3774ccbe9 100644 --- a/Command/Move.hs +++ b/Command/Move.hs @@ -51,6 +51,11 @@ showAction :: Bool -> FilePath -> Annex () showAction True file = showStart "move" file showAction False file = showStart "copy" file +{- Used to log a change in a remote's having a key. The change is logged + - in the local repo, not on the remote. The process of transferring the + - key to the remote, or removing the key from it *may* log the change + - on the remote, but this cannot be relied on. For example, it's not done + - for bare repos. -} remoteHasKey :: Git.Repo -> Key -> Bool -> Annex () remoteHasKey remote key present = do g <- Annex.gitRepo diff --git a/Content.hs b/Content.hs index 658d9a861..6b8316c08 100644 --- a/Content.hs +++ b/Content.hs @@ -23,7 +23,7 @@ import System.IO.Error (try) import System.Directory import Control.Monad.State (liftIO) import System.Path -import Control.Monad (when, filterM) +import Control.Monad (when, unless, filterM) import System.Posix.Files import System.FilePath @@ -54,13 +54,19 @@ calcGitLink file key = do return $ relPathDirToDir (parentDir absfile) (Git.workTree g) ".git" annexLocation key -{- Updates the LocationLog when a key's presence changes. -} +{- Updates the LocationLog when a key's presence changes. + - + - Note that the LocationLog is not updated in bare repositories. + - Operations that change a bare repository should be done from + - a non-bare repository, and the LocationLog in that repository be + - updated instead. -} logStatus :: Key -> LogStatus -> Annex () logStatus key status = do g <- Annex.gitRepo - u <- getUUID g - logfile <- liftIO $ logChange g key u status - Annex.queue "add" [Param "--"] logfile + unless (Git.repoIsLocalBare g) $ do + u <- getUUID g + logfile <- liftIO $ logChange g key u status + Annex.queue "add" [Param "--"] logfile {- Runs an action, passing it a temporary filename to download, - and if the action succeeds, moves the temp file into -- cgit v1.2.3