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

21
Utility/Attoparsec.hs Normal file
View file

@ -0,0 +1,21 @@
{- attoparsec utility functions
-
- Copyright 2019 Joey Hess <id@joeyh.name>
- Copyright 2007-2015 Bryan O'Sullivan
-
- License: BSD-3-clause
-}
module Utility.Attoparsec where
import qualified Data.Attoparsec.ByteString as A
import qualified Data.ByteString as B
-- | Parse and decode an unsigned octal number.
--
-- This parser does not accept a leading @\"0o\"@ string.
octal :: Integral a => A.Parser a
octal = B.foldl' step 0 `fmap` A.takeWhile1 isOctDigit
where
isOctDigit w = w >= 48 && w <= 55
step a w = a * 8 + fromIntegral (w - 48)