aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/install/dependency.zig76
-rw-r--r--src/install/install.zig10
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 => {},
}