diff options
author | Joey Hess <joeyh@joeyh.name> | 2015-10-26 15:35:55 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2015-10-26 15:35:55 -0400 |
commit | 87b4716ded485f51c391cd5bcdc7009ba6a61926 (patch) | |
tree | 678183f7c091e06599fdf4e6c2e3203b377e7152 | |
parent | dc8c7441512d4b64a41953ed8eb1a912e509f20f (diff) |
Catch up with current git behavior when both repo and repo.git exist; it seems it now prefers repo in this case, although historically it may have preferred repo.git.
-rw-r--r-- | Git/Construct.hs | 17 | ||||
-rw-r--r-- | debian/changelog | 3 |
2 files changed, 14 insertions, 6 deletions
diff --git a/Git/Construct.hs b/Git/Construct.hs index 5b206054b..03dd29f41 100644 --- a/Git/Construct.hs +++ b/Git/Construct.hs @@ -58,24 +58,29 @@ fromPath dir = fromAbsPath =<< absPath dir - specified. -} fromAbsPath :: FilePath -> IO Repo fromAbsPath dir - | absoluteGitPath dir = ifM (doesDirectoryExist dir') ( ret dir' , hunt ) + | absoluteGitPath dir = hunt | otherwise = error $ "internal error, " ++ dir ++ " is not absolute" where ret = pure . newFrom . LocalUnknown - {- Git always looks for "dir.git" in preference to - - to "dir", even if dir ends in a "/". -} canondir = dropTrailingPathSeparator dir - dir' = canondir ++ ".git" {- When dir == "foo/.git", git looks for "foo/.git/.git", - and failing that, uses "foo" as the repository. -} hunt | (pathSeparator:".git") `isSuffixOf` canondir = ifM (doesDirectoryExist $ dir </> ".git") ( ret dir - , ret $ takeDirectory canondir + , ret (takeDirectory canondir) ) - | otherwise = ret dir + | otherwise = ifM (doesDirectoryExist dir) + ( ret dir + -- git falls back to dir.git when dir doesn't + -- exist, as long as dir didn't end with a + -- path separator + , if dir == canondir + then ret (dir ++ ".git") + else ret dir + ) {- Remote Repo constructor. Throws exception on invalid url. - diff --git a/debian/changelog b/debian/changelog index 4c6b3fd8a..8fd9c71e5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -6,6 +6,9 @@ git-annex (5.20151020) UNRELEASED; urgency=medium * enableremote: List uuids and descriptions of remotes that can be enabled, and accept either the uuid or the description in leu if the name. + * Catch up with current git behavior when both repo and repo.git exist; + it seems it now prefers repo in this case, although historically it may + have preferred repo.git. -- Joey Hess <id@joeyh.name> Mon, 19 Oct 2015 17:00:21 -0400 |