map: Avoid looping forever with mutually recursive paths between repositories accessed via ssh

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
This commit is contained in:
Joey Hess 2025-04-22 15:45:11 -04:00
parent 87c6110a82
commit fd493804c0
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
4 changed files with 13 additions and 15 deletions

View file

@ -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

View file

@ -130,7 +130,7 @@ localToUrl reference r
[ s
, "//"
, auth
, fromOsPath $
, fromOsPath $ simplifyPath $
toOsPath referencepath </> repoPath r
]
in r { location = Url $ fromJust $ parseURIPortable absurl }

View 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

View file

@ -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.
"""]]