diff options
author | Joey Hess <joeyh@joeyh.name> | 2015-12-07 15:22:01 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2015-12-07 15:35:36 -0400 |
commit | ee0c34c8f2f94775b39ef10ed580cab47d2f929c (patch) | |
tree | 8b1b26a7f379d85f4658003a5e8a72559d009fcc /Command/Smudge.hs | |
parent | 42a370de0544e65fc1f150d3b2406b6683b7e5e1 (diff) |
support pointer files
Backend.lookupFile is changed to always fall back to catKey when
operating on a file that's not a symlink.
catKey is changed to understand pointer files, as well as annex symlinks.
Before, catKey needed a file mode witness, to be sure it was looking at a
symlink. That was complicated stuff. Now, it doesn't actually care if a
file in git is a symlink or not; in either case asking git for the content
of the file will get the pointer to the key.
This does mean that git-annex will treat a link
foo -> WORM--bar as a git-annex file, and also treats
a regular file containing annex/objects/WORM--bar as a git-annex file.
Calling catKey could make git-annex commands need to do more work than
before. This would especially be the case if a repo contained many regular
files, and only a few annexed files, as now git-annex will need to ask
git about the contents of the regular files.
Diffstat (limited to 'Command/Smudge.hs')
-rw-r--r-- | Command/Smudge.hs | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/Command/Smudge.hs b/Command/Smudge.hs index 6cca8035e..c2dc28540 100644 --- a/Command/Smudge.hs +++ b/Command/Smudge.hs @@ -11,6 +11,7 @@ import Common.Annex import Command import Types.Key import Annex.Content +import Annex.CatFile import Annex.MetaData import Annex.FileMatcher import Types.KeySource @@ -100,17 +101,11 @@ ingest file = do =<< liftIO (getFileStatus file) return k +-- Could add a newline and some text explaining this file is a pointer. +-- parsePointer only looks at the first line. emitPointer :: Key -> IO () emitPointer = putStrLn . key2file -parsePointer :: String -> Maybe Key -parsePointer s - | length s' >= maxsz = Nothing -- too long to be a key pointer - | otherwise = headMaybe (lines s') >>= file2key - where - s' = take maxsz s - maxsz = 81920 - updateAssociatedFiles :: Key -> FilePath -> Annex () updateAssociatedFiles k f = do h <- AssociatedFiles.openDb |