assistant: Work around git-cat-file's not reloading the index after files are staged.

Argh.
This commit is contained in:
Joey Hess 2013-05-25 00:37:41 -04:00
parent ed4febb170
commit 729eab1f89
4 changed files with 30 additions and 3 deletions

View file

@ -86,6 +86,7 @@ data AnnexState = AnnexState
, force :: Bool , force :: Bool
, fast :: Bool , fast :: Bool
, auto :: Bool , auto :: Bool
, daemon :: Bool
, branchstate :: BranchState , branchstate :: BranchState
, repoqueue :: Maybe Git.Queue.Queue , repoqueue :: Maybe Git.Queue.Queue
, catfilehandles :: M.Map FilePath CatFileHandle , catfilehandles :: M.Map FilePath CatFileHandle
@ -116,6 +117,7 @@ newState gitrepo = AnnexState
, force = False , force = False
, fast = False , fast = False
, auto = False , auto = False
, daemon = False
, branchstate = startBranchState , branchstate = startBranchState
, repoqueue = Nothing , repoqueue = Nothing
, catfilehandles = M.empty , catfilehandles = M.empty

View file

@ -57,15 +57,36 @@ catFileHandle = do
{- From the Sha or Ref of a symlink back to the key. -} {- From the Sha or Ref of a symlink back to the key. -}
catKey :: Ref -> Annex (Maybe Key) catKey :: Ref -> Annex (Maybe Key)
catKey ref = do catKey ref = do
l <- fromInternalGitPath . encodeW8 . L.unpack <$> catObject ref l <- fromInternalGitPath . encodeW8 . L.unpack <$> catObject ref
return $ if isLinkToAnnex l return $ if isLinkToAnnex l
then fileKey $ takeFileName l then fileKey $ takeFileName l
else Nothing 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 - Prefixing the file with ./ makes this work even if in a subdirectory
- of a repo. - 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 :: FilePath -> Annex (Maybe Key)
catKeyFile f = catKey $ Ref $ ":./" ++ f catKeyFile f = ifM (Annex.getState Annex.daemon)
( catKey $ Ref $ "HEAD:./" ++ f
, catKey $ Ref $ ":./" ++ f
)

View file

@ -9,6 +9,7 @@
module Assistant where module Assistant where
import qualified Annex
import Assistant.Common import Assistant.Common
import Assistant.DaemonStatus import Assistant.DaemonStatus
import Assistant.NamedThread import Assistant.NamedThread
@ -61,6 +62,7 @@ stopDaemon = liftIO . Utility.Daemon.stopDaemon =<< fromRepo gitAnnexPidFile
- stdout and stderr descriptors. -} - stdout and stderr descriptors. -}
startDaemon :: Bool -> Bool -> Maybe HostName -> Maybe (Maybe Handle -> Maybe Handle -> String -> FilePath -> IO ()) -> Annex () startDaemon :: Bool -> Bool -> Maybe HostName -> Maybe (Maybe Handle -> Maybe Handle -> String -> FilePath -> IO ()) -> Annex ()
startDaemon assistant foreground listenhost startbrowser = do startDaemon assistant foreground listenhost startbrowser = do
Annex.changeState $ \s -> s { Annex.daemon = True }
pidfile <- fromRepo gitAnnexPidFile pidfile <- fromRepo gitAnnexPidFile
logfile <- fromRepo gitAnnexLogFile logfile <- fromRepo gitAnnexLogFile
logfd <- liftIO $ openLog logfile logfd <- liftIO $ openLog logfile

2
debian/changelog vendored
View file

@ -11,6 +11,8 @@ git-annex (4.20130522) UNRELEASED; urgency=low
is sometimes on a different filesystem than the data directory. is sometimes on a different filesystem than the data directory.
* Fix bug in parsing of parens in some preferred content expressions. * Fix bug in parsing of parens in some preferred content expressions.
This fixes the behavior of the manual mode group. 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 -- Joey Hess <joeyh@debian.org> Tue, 21 May 2013 18:22:46 -0400