wip RawFilePath
Goal is to make git-annex faster by using ByteString for all the worktree traversal. For now, this is focusing on Command.Find, in order to benchmark how much it helps. (All other commands are temporarily disabled) Currently in a very bad unbuildable in-between state.
This commit is contained in:
parent
1f035c0d66
commit
6a97ff6b3a
25 changed files with 258 additions and 200 deletions
|
@ -12,23 +12,29 @@ import Common
|
|||
import Utility.Format (decode_c, encode_c)
|
||||
|
||||
import Data.Char
|
||||
import Data.Word
|
||||
import qualified Data.ByteString as S
|
||||
|
||||
decode :: String -> FilePath
|
||||
decode [] = []
|
||||
decode f@(c:s)
|
||||
-- encoded strings will be inside double quotes
|
||||
| c == '"' && end s == ['"'] = decode_c $ beginning s
|
||||
| otherwise = f
|
||||
-- encoded filenames will be inside double quotes
|
||||
decode :: S.ByteString -> RawFilePath
|
||||
decode b = case S.uncons b of
|
||||
Nothing -> b
|
||||
Just (h, t)
|
||||
| h /= q -> b
|
||||
| otherwise -> case S.unsnoc t of
|
||||
Nothing -> b
|
||||
Just (i, l)
|
||||
| l /= q -> b
|
||||
| otherwise ->
|
||||
encodeBS $ decode_c $ decodeBS i
|
||||
where
|
||||
q :: Word8
|
||||
q = fromIntegral (ord '"')
|
||||
|
||||
{- Should not need to use this, except for testing decode. -}
|
||||
encode :: FilePath -> String
|
||||
encode s = "\"" ++ encode_c s ++ "\""
|
||||
encode :: RawFilePath -> S.ByteString
|
||||
encode s = encodeBS $ "\"" ++ encode_c (decodeBS s) ++ "\""
|
||||
|
||||
{- For quickcheck.
|
||||
-
|
||||
- See comment on Utility.Format.prop_encode_c_decode_c_roundtrip for
|
||||
- why this only tests chars < 256 -}
|
||||
prop_encode_decode_roundtrip :: String -> Bool
|
||||
prop_encode_decode_roundtrip s = s' == decode (encode s')
|
||||
where
|
||||
s' = filter (\c -> ord c < 256) s
|
||||
{- For quickcheck. -}
|
||||
prop_encode_decode_roundtrip :: RawFilePath -> Bool
|
||||
prop_encode_decode_roundtrip s = s == decode (encode s)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue