map: Avoid looping forever with mutually recursive paths between repositories accesse...
authorJoey Hess <joeyh@joeyh.name>
Tue, 22 Apr 2025 19:45:11 +0000 (15:45 -0400)
committerJoey Hess <joeyh@joeyh.name>
Tue, 22 Apr 2025 19:50:30 +0000 (15:50 -0400)
Slightly unsatisfying to fix this in Git.Construct.localToUrl rather than
in Command.Map.absRepo, which is what map relies on to make repos always
use the same path form. But it was already constructing the url with the
path there, so that was the easiest place to add normalization.

Sponsored-by: Dartmouth College's OpenNeuro project
CHANGELOG
Git/Construct.hs
doc/bugs/map_goes_into_a_loop_for_a_bare_remote_/comment_1_cb67146caf6abb5382c6a4c389b76487._comment
doc/bugs/map_goes_into_a_loop_for_a_bare_remote_/comment_3_b86ad77f74b33a28963bde0850df7aa8._comment [new file with mode: 0644]

index 71168b39d357525cbaea2e60d25ccfa3a6561b00..f0eeb7b610d0afba510f5d2345c06ea830cc6843 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,8 @@ git-annex (10.20250417) UNRELEASED; urgency=medium
 
   * map: Fix buggy handling of remotes that are bare git repositories
     accessed via ssh.
+  * map: Avoid looping forever with mutually recursive paths between
+    repositories accessed via ssh.
 
  -- Joey Hess <id@joeyh.name>  Tue, 22 Apr 2025 14:33:26 -0400
 
index 3d37e137c6c439bcf67c5fa93ae8ea8bcd520017..7d21c92478f44ce3141e199ca30f31f0319defdd 100644 (file)
@@ -130,7 +130,7 @@ localToUrl reference r
                                [ s
                                , "//"
                                , auth
-                               , fromOsPath $
+                               , fromOsPath $ simplifyPath $
                                        toOsPath referencepath </> repoPath r
                                ]
                        in r { location = Url $ fromJust $ parseURIPortable absurl }
index 2e125ab3c43eb3582e024e6f8efcf00da99038f4..a437a22915e2e6061c06afd91650d377ae3abaa7 100644 (file)
@@ -15,20 +15,6 @@ Produced what I think is the same bug, or related, though without the looping:
 Where foo is a remote accessed via ssh, which happens to be on the same host and parent directory
 as the repo I ran map in, and itself has a remote named foo that has an url of "../foo.git"
 
-Changing the remote to be named foox with url "../foox", and 
-with the bare remote now at "../foox.git", I started to see some looping too,
-though it didn't loop forever:
-
-       map . ok
-       map origin (sshing...)
-       ok
-       map foox (sshing...)
-       ok
-       map origin (sshing...)
-       ok
-       map foox (sshing...)
-       ok
-
 One or both problems are caused by `map` using Git.Construct.fromRemotes
 on the git config that is has gotten by sshing to the remote and listing its config.
 Git.Construct really is written to operate on local repos, and fromRemotes
diff --git a/doc/bugs/map_goes_into_a_loop_for_a_bare_remote_/comment_3_b86ad77f74b33a28963bde0850df7aa8._comment b/doc/bugs/map_goes_into_a_loop_for_a_bare_remote_/comment_3_b86ad77f74b33a28963bde0850df7aa8._comment
new file mode 100644 (file)
index 0000000..6c0e7bf
--- /dev/null
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2025-04-22T19:42:40Z"
+ content="""
+Ok, I added path normalization and that fixed the infinite loop that I saw.
+
+I'm not 100% sure that it fixed the loop you saw though. Please test a
+daily build.
+"""]]