aboutsummaryrefslogtreecommitdiff
path: root/Command/Smudge.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2015-12-11 17:53:37 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2015-12-11 18:01:50 -0400
commitd0e5d276fa98ad6be7370556555c0f49a4838466 (patch)
treee09636bf95ee811440b0e02c7d587029a3e04570 /Command/Smudge.hs
parentf9e50ee7922068a2400dc9ddf4b30b059268981b (diff)
avoid smudge filter returning invalid content
1. git add file 2. git commit 3. modify file 4. git commit 5. git reset HEAD^ Before this fix, that resulted in git saying the file was modified. And indeed, it didn't have the content it should in the just checked out ref, because step 3 modified the object file for the old key.
Diffstat (limited to 'Command/Smudge.hs')
-rw-r--r--Command/Smudge.hs15
1 files changed, 12 insertions, 3 deletions
diff --git a/Command/Smudge.hs b/Command/Smudge.hs
index 1353c2791..b7f18085a 100644
--- a/Command/Smudge.hs
+++ b/Command/Smudge.hs
@@ -48,10 +48,19 @@ smudge file = do
case parseLinkOrPointer b of
Nothing -> liftIO $ B.putStr b
Just k -> do
+ -- A previous unlocked checkout of the file may have
+ -- led to the annex object getting modified;
+ -- don't provide such modified content as it
+ -- will be confusing. inAnnex will detect
+ -- modifications.
+ ifM (inAnnex k)
+ ( do
+ content <- calcRepo (gitAnnexLocation k)
+ liftIO $ B.putStr . fromMaybe b
+ =<< catchMaybeIO (B.readFile content)
+ , liftIO $ B.putStr b
+ )
Database.Keys.addAssociatedFile k file
- content <- calcRepo (gitAnnexLocation k)
- liftIO $ B.hPut stdout . fromMaybe b
- =<< catchMaybeIO (B.readFile content)
stop
-- Clean filter is fed file content on stdin, decides if a file