From: Joey Hess Date: Fri, 11 Dec 2015 21:53:37 +0000 (-0400) Subject: avoid smudge filter returning invalid content X-Git-Tag: archive/raspbian/10.20250416-2+rpi1~1^2~320^2~184^2~55 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=42caf42857f9c993dc96603c4938213f84068d52;p=git-annex.git 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. --- diff --git a/Command/Smudge.hs b/Command/Smudge.hs index 1353c27915..b7f18085ad 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