smudge filter working

This commit is contained in:
Joey Hess 2015-12-04 14:03:10 -04:00
parent 2c6454a2e2
commit d349693269
Failed to extract signature

View file

@ -9,9 +9,9 @@ module Command.Smudge where
import Common.Annex
import Command
import Annex.Content
import Annex.Link
import Git.Types
import Types.Key
import qualified Data.ByteString.Lazy as B
cmd :: Command
cmd = dontCheck repoExists $
@ -23,7 +23,25 @@ seek :: CmdParams -> CommandSeek
seek = withWords start
start :: [String] -> CommandStart
start [file] = do
error ("smudge " ++ file)
start [_file] = do
liftIO $ fileEncoding stdin
s <- liftIO $ hGetContents stdin
case parsePointer s of
Nothing -> liftIO $ putStr s
Just k -> do
content <- calcRepo (gitAnnexLocation k)
liftIO $ maybe
(putStr s)
(B.hPut stdout)
=<< catchMaybeIO (B.readFile content)
stop
start [] = error "smudge filter run without filename; upgrade git"
start _ = error "smudge filter passed multiple filenames"
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