diff options
author | Joey Hess <joey@kitenet.net> | 2013-05-25 00:37:41 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2013-05-25 00:37:41 -0400 |
commit | f5ccd0349ef558d222005aa05068d6a391293959 (patch) | |
tree | 0418de30ef46e5f363022a9ae1cb8deeb4d339c8 /Annex | |
parent | f36eb3efd41c1a35fcbba8fcee2707826c4716a8 (diff) |
assistant: Work around git-cat-file's not reloading the index after files are staged.
Argh.
Diffstat (limited to 'Annex')
-rw-r--r-- | Annex/CatFile.hs | 27 |
1 files changed, 24 insertions, 3 deletions
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 + ) |