From 1d16654a2212bc3194bc7391345c8a351eb31b4b Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Mon, 17 May 2021 10:46:24 -0400 Subject: [PATCH] convert formatLsTree to ByteString for speed --- Git/LsTree.hs | 13 +++++++------ Logs/Export.hs | 5 +++-- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Git/LsTree.hs b/Git/LsTree.hs index 2c57521c45..a49c4eaa78 100644 --- a/Git/LsTree.hs +++ b/Git/LsTree.hs @@ -28,6 +28,7 @@ import Utility.Attoparsec import Numeric import Data.Either +import Data.Char import System.Posix.Types import qualified Data.ByteString as S import qualified Data.ByteString.Lazy as L @@ -146,9 +147,9 @@ parserLsTree long = case long of {- Inverse of parseLsTree. Note that the long output format is not - generated, so any size information is not included. -} -formatLsTree :: TreeItem -> String -formatLsTree ti = unwords - [ showOct (mode ti) "" - , decodeBS (typeobj ti) - , fromRef (sha ti) - ] ++ ('\t' : fromRawFilePath (getTopFilePath (file ti))) +formatLsTree :: TreeItem -> S.ByteString +formatLsTree ti = S.intercalate (S.singleton (fromIntegral (ord ' '))) + [ encodeBS' (showOct (mode ti) "") + , typeobj ti + , fromRef' (sha ti) + ] <> (S.cons (fromIntegral (ord '\t')) (getTopFilePath (file ti))) diff --git a/Logs/Export.hs b/Logs/Export.hs index 6fea1b9a96..ecbf4b4aa0 100644 --- a/Logs/Export.hs +++ b/Logs/Export.hs @@ -23,6 +23,7 @@ module Logs.Export ( ) where import qualified Data.Map as M +import qualified Data.ByteString as B import Annex.Common import qualified Annex.Branch @@ -119,10 +120,10 @@ logExportExcluded :: UUID -> ((Git.Tree.TreeItem -> IO ()) -> Annex a) -> Annex logExportExcluded u a = do logf <- fromRepo $ gitAnnexExportExcludeLog u withLogHandle logf $ \logh -> do - liftIO $ hSetNewlineMode logh noNewlineTranslation a (writer logh) where - writer logh = hPutStrLn logh + writer logh = B.hPutStr logh + . flip B.snoc (fromIntegral (ord '\n')) . Git.LsTree.formatLsTree . Git.Tree.treeItemToLsTreeItem