diff options
Diffstat (limited to 'Git/Objects.hs')
-rw-r--r-- | Git/Objects.hs | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/Git/Objects.hs b/Git/Objects.hs index 6a24087..9b7165c 100644 --- a/Git/Objects.hs +++ b/Git/Objects.hs @@ -5,39 +5,45 @@ - Licensed under the GNU AGPL version 3 or higher. -} +{-# LANGUAGE OverloadedStrings #-} + module Git.Objects where import Common import Git import Git.Sha -objectsDir :: Repo -> FilePath -objectsDir r = fromRawFilePath (localGitDir r) </> "objects" +import qualified Data.ByteString as B +import qualified System.FilePath.ByteString as P + +objectsDir :: Repo -> RawFilePath +objectsDir r = localGitDir r P.</> "objects" -packDir :: Repo -> FilePath -packDir r = objectsDir r </> "pack" +packDir :: Repo -> RawFilePath +packDir r = objectsDir r P.</> "pack" -packIdxFile :: FilePath -> FilePath -packIdxFile = flip replaceExtension "idx" +packIdxFile :: RawFilePath -> RawFilePath +packIdxFile = flip P.replaceExtension "idx" listPackFiles :: Repo -> IO [FilePath] listPackFiles r = filter (".pack" `isSuffixOf`) - <$> catchDefaultIO [] (dirContents $ packDir r) + <$> catchDefaultIO [] (dirContents $ fromRawFilePath $ packDir r) listLooseObjectShas :: Repo -> IO [Sha] listLooseObjectShas r = catchDefaultIO [] $ mapMaybe (extractSha . encodeBS . concat . reverse . take 2 . reverse . splitDirectories) - <$> dirContentsRecursiveSkipping (== "pack") True (objectsDir r) + <$> dirContentsRecursiveSkipping (== "pack") True (fromRawFilePath (objectsDir r)) -looseObjectFile :: Repo -> Sha -> FilePath -looseObjectFile r sha = objectsDir r </> prefix </> rest +looseObjectFile :: Repo -> Sha -> RawFilePath +looseObjectFile r sha = objectsDir r P.</> prefix P.</> rest where - (prefix, rest) = splitAt 2 (fromRef sha) + (prefix, rest) = B.splitAt 2 (fromRef' sha) listAlternates :: Repo -> IO [FilePath] -listAlternates r = catchDefaultIO [] (lines <$> readFile alternatesfile) +listAlternates r = catchDefaultIO [] $ + lines <$> readFile (fromRawFilePath alternatesfile) where - alternatesfile = objectsDir r </> "info" </> "alternates" + alternatesfile = objectsDir r P.</> "info" P.</> "alternates" {- A repository recently cloned with --shared will have one or more - alternates listed, and contain no loose objects or packs. -} |