diff options
-rw-r--r-- | Annex.hs | 2 | ||||
-rw-r--r-- | Annex/CatFile.hs | 27 | ||||
-rw-r--r-- | Assistant.hs | 2 | ||||
-rw-r--r-- | debian/changelog | 2 |
4 files changed, 30 insertions, 3 deletions
@@ -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 |