mirror of
https://github.com/NixOS/nix.git
synced 2025-11-15 15:02:42 +01:00
fetchGit: Drop git+ from the url attribute
This was already dropped in `inputFromURL()`, but not in `inputFromAttrs()`. Now it's done in `fixGitURL()`, which is used by both. In principle, `git+` shouldn't be used in the `url` attribute, since we already know that it's a Git URL. But since it currently works, we don't want to break it. Fixes #14429.
This commit is contained in:
parent
3f18cad5f1
commit
40f600644d
4 changed files with 18 additions and 15 deletions
|
|
@ -409,21 +409,23 @@ ParsedUrlScheme parseUrlScheme(std::string_view scheme)
|
|||
};
|
||||
}
|
||||
|
||||
ParsedURL fixGitURL(const std::string & url)
|
||||
ParsedURL fixGitURL(std::string url)
|
||||
{
|
||||
std::regex scpRegex("([^/]*)@(.*):(.*)");
|
||||
if (!hasPrefix(url, "/") && std::regex_match(url, scpRegex))
|
||||
return parseURL(std::regex_replace(url, scpRegex, "ssh://$1@$2/$3"));
|
||||
if (hasPrefix(url, "file:"))
|
||||
return parseURL(url);
|
||||
if (url.find("://") == std::string::npos) {
|
||||
url = std::regex_replace(url, scpRegex, "ssh://$1@$2/$3");
|
||||
if (!hasPrefix(url, "file:") && !hasPrefix(url, "git+file:") && url.find("://") == std::string::npos)
|
||||
return ParsedURL{
|
||||
.scheme = "file",
|
||||
.authority = ParsedURL::Authority{},
|
||||
.path = splitString<std::vector<std::string>>(url, "/"),
|
||||
};
|
||||
}
|
||||
return parseURL(url);
|
||||
auto parsed = parseURL(url);
|
||||
// Drop the superfluous "git+" from the scheme.
|
||||
auto scheme = parseUrlScheme(parsed.scheme);
|
||||
if (scheme.application == "git")
|
||||
parsed.scheme = scheme.transport;
|
||||
return parsed;
|
||||
}
|
||||
|
||||
// https://www.rfc-editor.org/rfc/rfc3986#section-3.1
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue