diff options
author | 2023-01-29 08:14:07 +0200 | |
---|---|---|
committer | 2023-01-28 22:14:07 -0800 | |
commit | 48eb0c12ab2c568d7ff706c2b0a6616d428032c8 (patch) | |
tree | 495cb3f35b1ed05459969a9e2b4eb162c0d5d55f /src | |
parent | fe389ad5ab107a80f71de6c293842dfe80240a17 (diff) | |
download | bun-48eb0c12ab2c568d7ff706c2b0a6616d428032c8.tar.gz bun-48eb0c12ab2c568d7ff706c2b0a6616d428032c8.tar.zst bun-48eb0c12ab2c568d7ff706c2b0a6616d428032c8.zip |
parse `git+https://github.com/` as GitHub URLs (#1926)
fixes #1921
Diffstat (limited to 'src')
-rw-r--r-- | src/install/dependency.zig | 76 | ||||
-rw-r--r-- | src/install/install.zig | 10 |
2 files changed, 58 insertions, 28 deletions
diff --git a/src/install/dependency.zig b/src/install/dependency.zig index 600a90373..98a62ac87 100644 --- a/src/install/dependency.zig +++ b/src/install/dependency.zig @@ -377,20 +377,43 @@ pub const Version = struct { // git://user@example.com/repo.git 'g' => { if (strings.hasPrefixComptime(dependency, "git")) { - const url = dependency["git".len..]; + var url = dependency["git".len..]; if (url.len > 2) { switch (url[0]) { ':' => { if (strings.hasPrefixComptime(url, "://")) return .git; }, '+' => { - if (strings.hasPrefixComptime(url, "+ssh") or - strings.hasPrefixComptime(url, "+file") or - strings.hasPrefixComptime(url, "+http") or - strings.hasPrefixComptime(url, "+https")) + if (strings.hasPrefixComptime(url, "+ssh:") or + strings.hasPrefixComptime(url, "+file:")) { return .git; } + if (strings.hasPrefixComptime(url, "+http")) { + url = url["+http".len..]; + if (url.len > 2 and switch (url[0]) { + ':' => brk: { + if (strings.hasPrefixComptime(url, "://")) { + url = url["://".len..]; + break :brk true; + } + break :brk false; + }, + 's' => brk: { + if (strings.hasPrefixComptime(url, "s://")) { + url = url["s://".len..]; + break :brk true; + } + break :brk false; + }, + else => false, + }) { + if (strings.hasPrefixComptime(url, "github.com/")) { + if (isGitHubRepoPath(url["github.com/".len..])) return .github; + } + return .git; + } + } }, 'h' => { if (strings.hasPrefixComptime(url, "hub:")) { @@ -666,25 +689,30 @@ pub fn parseWithTag( var input = dependency; if (strings.hasPrefixComptime(input, "github:")) { input = input["github:".len..]; - } else if (strings.hasPrefixComptime(input, "http")) { - var url = input["http".len..]; - if (url.len > 2) { - switch (url[0]) { - ':' => { - if (strings.hasPrefixComptime(url, "://")) { - url = url["://".len..]; - } - }, - 's' => { - if (strings.hasPrefixComptime(url, "s://")) { - url = url["s://".len..]; - } - }, - else => {}, - } - if (strings.hasPrefixComptime(url, "github.com/")) { - input = url["github.com/".len..]; - from_url = true; + } else { + if (strings.hasPrefixComptime(input, "git+")) { + input = input["git+".len..]; + } + if (strings.hasPrefixComptime(input, "http")) { + var url = input["http".len..]; + if (url.len > 2) { + switch (url[0]) { + ':' => { + if (strings.hasPrefixComptime(url, "://")) { + url = url["://".len..]; + } + }, + 's' => { + if (strings.hasPrefixComptime(url, "s://")) { + url = url["s://".len..]; + } + }, + else => {}, + } + if (strings.hasPrefixComptime(url, "github.com/")) { + input = url["github.com/".len..]; + from_url = true; + } } } } diff --git a/src/install/install.zig b/src/install/install.zig index 3a165d234..585243163 100644 --- a/src/install/install.zig +++ b/src/install/install.zig @@ -5340,10 +5340,12 @@ pub const PackageManager = struct { }; } switch (version.tag) { - .dist_tag, .npm => version.literal = if (strings.lastIndexOfChar(value, '@')) |at| - String.init(value, value[at + 1 ..]) - else - String.from(""), + .dist_tag, .npm => version.literal = brk: { + if (strings.lastIndexOfChar(value, '@')) |at| { + if (at >= "npm:@".len) break :brk String.init(value, value[at + 1 ..]); + } + break :brk String.from(""); + }, else => {}, } |