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 Common.Annex
import Command import Command
import Annex.Content import Types.Key
import Annex.Link
import Git.Types import qualified Data.ByteString.Lazy as B
cmd :: Command cmd :: Command
cmd = dontCheck repoExists $ cmd = dontCheck repoExists $
@ -23,7 +23,25 @@ seek :: CmdParams -> CommandSeek
seek = withWords start seek = withWords start
start :: [String] -> CommandStart start :: [String] -> CommandStart
start [file] = do start [_file] = do
error ("smudge " ++ file) 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 run without filename; upgrade git"
start _ = error "smudge filter passed multiple filenames" 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