aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2013-05-25 00:37:41 -0400
committerGravatar Joey Hess <joey@kitenet.net>2013-05-25 00:37:41 -0400
commitf5ccd0349ef558d222005aa05068d6a391293959 (patch)
tree0418de30ef46e5f363022a9ae1cb8deeb4d339c8
parentf36eb3efd41c1a35fcbba8fcee2707826c4716a8 (diff)
assistant: Work around git-cat-file's not reloading the index after files are staged.
Argh.
-rw-r--r--Annex.hs2
-rw-r--r--Annex/CatFile.hs27
-rw-r--r--Assistant.hs2
-rw-r--r--debian/changelog2
4 files changed, 30 insertions, 3 deletions
diff --git a/Annex.hs b/Annex.hs
index 3771bf5ba..2f0f7f5dc 100644
--- a/Annex.hs
+++ b/Annex.hs
@@ -86,6 +86,7 @@ data AnnexState = AnnexState
, force :: Bool
, fast :: Bool
, auto :: Bool
+ , daemon :: Bool
, branchstate :: BranchState
, repoqueue :: Maybe Git.Queue.Queue
, catfilehandles :: M.Map FilePath CatFileHandle
@@ -116,6 +117,7 @@ newState gitrepo = AnnexState
, force = False
, fast = False
, auto = False
+ , daemon = False
, branchstate = startBranchState
, repoqueue = Nothing
, catfilehandles = M.empty
diff --git a/Annex/CatFile.hs b/Annex/CatFile.hs
index 71b8985a3..f90e74509 100644
--- a/Annex/CatFile.hs
+++ b/Annex/CatFile.hs
@@ -57,15 +57,36 @@ catFileHandle = do
{- From the Sha or Ref of a symlink back to the key. -}
catKey :: Ref -> Annex (Maybe Key)
catKey ref = do
- l <- fromInternalGitPath . encodeW8 . L.unpack <$> catObject ref
+ l <- fromInternalGitPath . encodeW8 . L.unpack <$> catObject ref
return $ if isLinkToAnnex l
then fileKey $ takeFileName l
else Nothing
-{- From a file in git back to the key.
+{- From a file in the repository back to the key.
-
- Prefixing the file with ./ makes this work even if in a subdirectory
- of a repo.
+ -
+ - Ideally, this should reflect the key that's staged in the index,
+ - not the key that's committed to HEAD. Unfortunately, git cat-file
+ - does not refresh the index file after it's started up, so things
+ - newly staged in the index won't show up. It does, however, notice
+ - when branches change.
+ -
+ - For command-line git-annex use, that doesn't matter. It's perfectly
+ - reasonable for things staged in the index after the currently running
+ - git-annex process to not be noticed by it.
+ -
+ - For the assistant, this is much more of a problem, since it commits
+ - files and then needs to be able to immediately look up their keys.
+ - OTOH, the assistant doesn't keep changes staged in the index for very
+ - long at all before committing them -- and it won't look at the keys
+ - of files until after committing them.
+ -
+ - So, this gets info from the index, unless running as a daemon.
-}
catKeyFile :: FilePath -> Annex (Maybe Key)
-catKeyFile f = catKey $ Ref $ ":./" ++ f
+catKeyFile f = ifM (Annex.getState Annex.daemon)
+ ( catKey $ Ref $ "HEAD:./" ++ f
+ , catKey $ Ref $ ":./" ++ f
+ )
diff --git a/Assistant.hs b/Assistant.hs
index 7e9f82449..c14f1e0df 100644
--- a/Assistant.hs
+++ b/Assistant.hs
@@ -9,6 +9,7 @@
module Assistant where
+import qualified Annex
import Assistant.Common
import Assistant.DaemonStatus
import Assistant.NamedThread
@@ -61,6 +62,7 @@ stopDaemon = liftIO . Utility.Daemon.stopDaemon =<< fromRepo gitAnnexPidFile
- stdout and stderr descriptors. -}
startDaemon :: Bool -> Bool -> Maybe HostName -> Maybe (Maybe Handle -> Maybe Handle -> String -> FilePath -> IO ()) -> Annex ()
startDaemon assistant foreground listenhost startbrowser = do
+ Annex.changeState $ \s -> s { Annex.daemon = True }
pidfile <- fromRepo gitAnnexPidFile
logfile <- fromRepo gitAnnexLogFile
logfd <- liftIO $ openLog logfile
diff --git a/debian/changelog b/debian/changelog
index 5bec3f555..95ef3c478 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -11,6 +11,8 @@ git-annex (4.20130522) UNRELEASED; urgency=low
is sometimes on a different filesystem than the data directory.
* Fix bug in parsing of parens in some preferred content expressions.
This fixes the behavior of the manual mode group.
+ * assistant: Work around git-cat-file's not reloading the index after files
+ are staged.
-- Joey Hess <joeyh@debian.org> Tue, 21 May 2013 18:22:46 -0400