Catch up with current git behavior when both repo and repo.git exist; it seems it...
authorJoey Hess <joeyh@joeyh.name>
Mon, 26 Oct 2015 19:35:55 +0000 (15:35 -0400)
committerJoey Hess <joeyh@joeyh.name>
Mon, 26 Oct 2015 19:35:55 +0000 (15:35 -0400)
Git/Construct.hs
debian/changelog

index 5b206054befe9ce728dad1bd6c99def4c49ee6ca..03dd29f416280df6168d060d8e825543faa99baa 100644 (file)
@@ -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.
  -
index 4c6b3fd8a53b0f9b496cbc84b78e93bb6f7f094f..8fd9c71e54a824980ef7c380d3448f9d24273ff7 100644 (file)
@@ -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