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
{- 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)))
) where
import qualified Data.Map as M
+import qualified Data.ByteString as B
import Annex.Common
import qualified Annex.Branch
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