summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2015-10-26 15:35:55 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2015-10-26 15:35:55 -0400
commit87b4716ded485f51c391cd5bcdc7009ba6a61926 (patch)
tree678183f7c091e06599fdf4e6c2e3203b377e7152
parentdc8c7441512d4b64a41953ed8eb1a912e509f20f (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.hs17
-rw-r--r--debian/changelog3
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