reorg
This commit is contained in:
parent
68257e9076
commit
218e1983ad
2 changed files with 37 additions and 37 deletions
|
@ -14,9 +14,6 @@ module Git.FilterProcess (
|
||||||
WelcomeMessage(..),
|
WelcomeMessage(..),
|
||||||
Version(..),
|
Version(..),
|
||||||
Capability(..),
|
Capability(..),
|
||||||
readUntilFlushPkt,
|
|
||||||
readUntilFlushPktOrSize,
|
|
||||||
discardUntilFlushPkt,
|
|
||||||
longRunningProcessHandshake,
|
longRunningProcessHandshake,
|
||||||
longRunningFilterProcessHandshake,
|
longRunningFilterProcessHandshake,
|
||||||
FilterRequest(..),
|
FilterRequest(..),
|
||||||
|
@ -77,40 +74,6 @@ decodeCapability pktline = decodeConfigValue pktline >>= \case
|
||||||
ConfigValue "capability" c -> Just $ Capability c
|
ConfigValue "capability" c -> Just $ Capability c
|
||||||
_ -> Nothing
|
_ -> Nothing
|
||||||
|
|
||||||
{- Reads PktLines until a flushPkt (or EOF),
|
|
||||||
- and returns all except the flushPkt -}
|
|
||||||
readUntilFlushPkt :: IO [PktLine]
|
|
||||||
readUntilFlushPkt = go []
|
|
||||||
where
|
|
||||||
go l = readPktLine stdin >>= \case
|
|
||||||
Just pktline | not (isFlushPkt pktline) -> go (pktline:l)
|
|
||||||
_ -> return (reverse l)
|
|
||||||
|
|
||||||
{- Reads PktLines until at least the specified number of bytes have been
|
|
||||||
- read, or until a flushPkt (or EOF). Returns Right if it did read a
|
|
||||||
- flushPkt/EOF, and Left if there is still content leftover that needs to
|
|
||||||
- be read. -}
|
|
||||||
readUntilFlushPktOrSize :: Int -> IO (Either [PktLine] [PktLine])
|
|
||||||
readUntilFlushPktOrSize = go []
|
|
||||||
where
|
|
||||||
go l n = readPktLine stdin >>= \case
|
|
||||||
Just pktline
|
|
||||||
| isFlushPkt pktline -> return (Right (reverse l))
|
|
||||||
| otherwise ->
|
|
||||||
let len = B.length (pktLineToByteString pktline)
|
|
||||||
n' = n - len
|
|
||||||
in if n' <= 0
|
|
||||||
then return (Left (reverse (pktline:l)))
|
|
||||||
else go (pktline:l) n'
|
|
||||||
Nothing -> return (Right (reverse l))
|
|
||||||
|
|
||||||
{- Reads PktLines until a flushPkt (or EOF), and throws them away. -}
|
|
||||||
discardUntilFlushPkt :: IO ()
|
|
||||||
discardUntilFlushPkt = readPktLine stdin >>= \case
|
|
||||||
Just pktline | isFlushPkt pktline -> return ()
|
|
||||||
Nothing -> return ()
|
|
||||||
_ -> discardUntilFlushPkt
|
|
||||||
|
|
||||||
longRunningProcessHandshake
|
longRunningProcessHandshake
|
||||||
:: (WelcomeMessage -> Maybe WelcomeMessage)
|
:: (WelcomeMessage -> Maybe WelcomeMessage)
|
||||||
-> ([Version] -> [Version])
|
-> ([Version] -> [Version])
|
||||||
|
|
|
@ -19,6 +19,9 @@ module Git.PktLine (
|
||||||
writePktLine,
|
writePktLine,
|
||||||
flushPkt,
|
flushPkt,
|
||||||
isFlushPkt,
|
isFlushPkt,
|
||||||
|
readUntilFlushPkt,
|
||||||
|
readUntilFlushPktOrSize,
|
||||||
|
discardUntilFlushPkt,
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import System.IO
|
import System.IO
|
||||||
|
@ -115,3 +118,37 @@ flushPkt = PktLine mempty
|
||||||
|
|
||||||
isFlushPkt :: PktLine -> Bool
|
isFlushPkt :: PktLine -> Bool
|
||||||
isFlushPkt (PktLine b) = b == mempty
|
isFlushPkt (PktLine b) = b == mempty
|
||||||
|
|
||||||
|
{- Reads PktLines until a flushPkt (or EOF),
|
||||||
|
- and returns all except the flushPkt -}
|
||||||
|
readUntilFlushPkt :: IO [PktLine]
|
||||||
|
readUntilFlushPkt = go []
|
||||||
|
where
|
||||||
|
go l = readPktLine stdin >>= \case
|
||||||
|
Just pktline | not (isFlushPkt pktline) -> go (pktline:l)
|
||||||
|
_ -> return (reverse l)
|
||||||
|
|
||||||
|
{- Reads PktLines until at least the specified number of bytes have been
|
||||||
|
- read, or until a flushPkt (or EOF). Returns Right if it did read a
|
||||||
|
- flushPkt/EOF, and Left if there is still content leftover that needs to
|
||||||
|
- be read. -}
|
||||||
|
readUntilFlushPktOrSize :: Int -> IO (Either [PktLine] [PktLine])
|
||||||
|
readUntilFlushPktOrSize = go []
|
||||||
|
where
|
||||||
|
go l n = readPktLine stdin >>= \case
|
||||||
|
Just pktline
|
||||||
|
| isFlushPkt pktline -> return (Right (reverse l))
|
||||||
|
| otherwise ->
|
||||||
|
let len = B.length (pktLineToByteString pktline)
|
||||||
|
n' = n - len
|
||||||
|
in if n' <= 0
|
||||||
|
then return (Left (reverse (pktline:l)))
|
||||||
|
else go (pktline:l) n'
|
||||||
|
Nothing -> return (Right (reverse l))
|
||||||
|
|
||||||
|
{- Reads PktLines until a flushPkt (or EOF), and throws them away. -}
|
||||||
|
discardUntilFlushPkt :: IO ()
|
||||||
|
discardUntilFlushPkt = readPktLine stdin >>= \case
|
||||||
|
Just pktline | isFlushPkt pktline -> return ()
|
||||||
|
Nothing -> return ()
|
||||||
|
_ -> discardUntilFlushPkt
|
||||||
|
|
Loading…
Reference in a new issue