smudge filter working
This commit is contained in:
parent
2c6454a2e2
commit
d349693269
1 changed files with 23 additions and 5 deletions
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue