fix git ls-tree parser

File mode is octal not decimal. This broke in the conversion to
attoparsec.

(I've submitted the content of Utility.Attoparsec to the attoparsec
developers.)

Test suite passes 100% now.
This commit is contained in:
Joey Hess 2019-12-06 13:58:28 -04:00
parent 4aaef14c61
commit f39f018ee0
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
5 changed files with 59 additions and 3 deletions

View file

@ -24,6 +24,7 @@ import Git.Command
import Git.Sha
import Git.FilePath
import qualified Git.Filename
import Utility.Attoparsec
import Numeric
import Data.Either
@ -90,7 +91,7 @@ parseLsTree b = case A.parse parserLsTree b of
parserLsTree :: A.Parser TreeItem
parserLsTree = TreeItem
-- mode
<$> A8.decimal
<$> octal
<* A8.char ' '
-- type
<*> A.takeTill (== 32)

View file

@ -112,7 +112,7 @@ fmtObjectType TreeObject = "tree"
{- Types of items in a tree. -}
data TreeItemType = TreeFile | TreeExecutable | TreeSymlink | TreeSubmodule
deriving (Eq)
deriving (Eq, Show)
{- Git uses magic numbers to denote the type of a tree item. -}
readTreeItemType :: S.ByteString -> Maybe TreeItemType