diff options
Diffstat (limited to 'Git')
-rw-r--r-- | Git/CheckAttr.hs | 2 | ||||
-rw-r--r-- | Git/Command.hs | 2 | ||||
-rw-r--r-- | Git/FilePath.hs | 3 | ||||
-rw-r--r-- | Git/LsFiles.hs | 4 | ||||
-rw-r--r-- | Git/Repair.hs | 11 |
5 files changed, 12 insertions, 10 deletions
diff --git a/Git/CheckAttr.hs b/Git/CheckAttr.hs index bf46b938f..430154116 100644 --- a/Git/CheckAttr.hs +++ b/Git/CheckAttr.hs @@ -84,7 +84,7 @@ checkAttr (h, attrs, oldgit, currdir) want file = do - so use relative filenames. -} file' | oldgit = absPathFrom currdir file - | otherwise = relPathDirToFile currdir $ absPathFrom currdir file + | otherwise = relPathDirToFileAbs currdir $ absPathFrom currdir file oldattrvalue attr l = end bits !! 0 where bits = split sep l diff --git a/Git/Command.hs b/Git/Command.hs index c61cc9fe8..53b1d68fd 100644 --- a/Git/Command.hs +++ b/Git/Command.hs @@ -16,7 +16,7 @@ import qualified Utility.CoProcess as CoProcess {- Constructs a git command line operating on the specified repo. -} gitCommandLine :: [CommandParam] -> Repo -> [CommandParam] -gitCommandLine params r@(Repo { location = l@(Local _ _ ) }) = +gitCommandLine params r@(Repo { location = l@(Local { } ) }) = setdir : settree ++ gitGlobalOpts r ++ params where setdir = Param $ "--git-dir=" ++ gitdir l diff --git a/Git/FilePath.hs b/Git/FilePath.hs index 42eb0812e..88f315b1c 100644 --- a/Git/FilePath.hs +++ b/Git/FilePath.hs @@ -39,8 +39,7 @@ fromTopFilePath p repo = absPathFrom (repoPath repo) (getTopFilePath p) {- The input FilePath can be absolute, or relative to the CWD. -} toTopFilePath :: FilePath -> Git.Repo -> IO TopFilePath -toTopFilePath file repo = TopFilePath <$> - relPathDirToFile (repoPath repo) <$> absPath file +toTopFilePath file repo = TopFilePath <$> relPathDirToFile (repoPath repo) file {- The input FilePath must already be relative to the top of the git - repository -} diff --git a/Git/LsFiles.hs b/Git/LsFiles.hs index 2aa05ba7f..8d32ba7ef 100644 --- a/Git/LsFiles.hs +++ b/Git/LsFiles.hs @@ -131,9 +131,9 @@ typeChanged' ps l repo = do (fs, cleanup) <- pipeNullSplit (prefix ++ ps ++ suffix) repo -- git diff returns filenames relative to the top of the git repo; -- convert to filenames relative to the cwd, like git ls-files. - let top = repoPath repo + top <- absPath (repoPath repo) currdir <- getCurrentDirectory - return (map (\f -> relPathDirToFile currdir $ top </> f) fs, cleanup) + return (map (\f -> relPathDirToFileAbs currdir $ top </> f) fs, cleanup) where prefix = [Params "diff --name-only --diff-filter=T -z"] suffix = Param "--" : (if null l then [File "."] else map File l) diff --git a/Git/Repair.hs b/Git/Repair.hs index 77a592b4e..bee9f2b50 100644 --- a/Git/Repair.hs +++ b/Git/Repair.hs @@ -225,10 +225,13 @@ badBranches missing r = filterM isbad =<< getAllRefs r - Relies on packed refs being exploded before it's called. -} getAllRefs :: Repo -> IO [Ref] -getAllRefs r = map toref <$> dirContentsRecursive refdir - where - refdir = localGitDir r </> "refs" - toref = Ref . relPathDirToFile (localGitDir r) +getAllRefs r = getAllRefs' (localGitDir r </> "refs") + +getAllRefs' :: FilePath -> IO [Ref] +getAllRefs' refdir = do + let topsegs = length (splitPath refdir) - 1 + let toref = Ref . joinPath . drop topsegs . splitPath + map toref <$> dirContentsRecursive refdir explodePackedRefsFile :: Repo -> IO () explodePackedRefsFile r = do |