From: Joey Hess Date: Wed, 2 Apr 2025 19:29:46 +0000 (-0400) Subject: URL decoding for username and path X-Git-Tag: archive/raspbian/10.20250416-2+rpi1~1^2~6^2~26 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=bb04d1e71fe4a9c50c7e34a65a5687aca62e3ed5;p=git-annex.git URL decoding for username and path * Support git remotes that use an url with a user name that is URL encoded. * Fix git-lfs special remote ssh endpoint discovery when the repository path is URL encoded. In the previous commit, Git.Url.host was made to do URL decoding. That made me wonder, what about URL encoded username and path? And so to these two additional fixes. Note that Git.Url.authority remains URL encoded. That seems ok given how it's used. --- diff --git a/CHANGELOG b/CHANGELOG index d172c1b897..c579827738 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -12,6 +12,9 @@ git-annex (10.20250321) UNRELEASED; urgency=medium * migrate: Fix --remove-size to work when a file is not present. Fixes reversion introduced in version 10.20231129. * Support git remotes that use a IPV6 link-local address with a zone ID. + * Support git remotes that use an url with a user name that is URL encoded. + * Fix git-lfs special remote ssh endpoint discovery when the repository + path is URL encoded. -- Joey Hess Fri, 21 Mar 2025 12:27:11 -0400 diff --git a/Git/Url.hs b/Git/Url.hs index af13f58391..3114d1db0a 100644 --- a/Git/Url.hs +++ b/Git/Url.hs @@ -54,10 +54,13 @@ port r = Just (':':p) -> readish p Just _ -> Nothing -{- Hostname of an URL repo, including any username (ie, "user@host") -} +{- Hostname of an URL repo, including any username (ie, "user@host") + - + - Both the username and hostname are URI-decoded. + -} hostuser :: Repo -> Maybe String hostuser r = (++) - <$> authpart uriUserInfo r + <$> authpart (unEscapeString . uriUserInfo) r <*> host r {- The full authority portion an URL repo. (ie, "user@host:port") -} @@ -71,7 +74,7 @@ authpart :: (URIAuth -> a) -> Repo -> Maybe a authpart a Repo { location = Url u } = a <$> uriAuthority u authpart _ _ = Nothing -{- Path part of an URL repo. -} +{- Path part of an URL repo. It is URI-decoded. -} path :: Repo -> Maybe FilePath -path Repo { location = Url u } = Just (uriPath u) +path Repo { location = Url u } = Just $ unEscapeString $ uriPath u path _ = Nothing