summaryrefslogtreecommitdiff
path: root/Command/Smudge.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2015-12-07 15:22:01 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2015-12-07 15:35:36 -0400
commitee0c34c8f2f94775b39ef10ed580cab47d2f929c (patch)
tree8b1b26a7f379d85f4658003a5e8a72559d009fcc /Command/Smudge.hs
parent42a370de0544e65fc1f150d3b2406b6683b7e5e1 (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.hs11
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