diff options
author | 2021-11-16 15:03:57 -0800 | |
---|---|---|
committer | 2021-12-16 19:18:51 -0800 | |
commit | e08710e373f81341844f35d0e510cb10ab764ee6 (patch) | |
tree | 9dd3f3d986d43aea721bcfc1b9e0519dbe8575b2 | |
parent | 48b9af129832e0003f0de3086c1ef63bb27feb53 (diff) | |
download | bun-e08710e373f81341844f35d0e510cb10ab764ee6.tar.gz bun-e08710e373f81341844f35d0e510cb10ab764ee6.tar.zst bun-e08710e373f81341844f35d0e510cb10ab764ee6.zip |
[bun install] Resolve more packages
-rw-r--r-- | src/install/install.zig | 60 |
1 files changed, 38 insertions, 22 deletions
diff --git a/src/install/install.zig b/src/install/install.zig index 7309486ac..b066f632c 100644 --- a/src/install/install.zig +++ b/src/install/install.zig @@ -163,7 +163,7 @@ pub const Dependency = struct { pub fn infer(dependency: string) Tag { switch (dependency[0]) { // npm package - '0'...'9', '^', '*', '~', '|' => return Tag.npm, + '=', '>', '<', '0'...'9', '^', '*', '~', '|' => return Tag.npm, // MIGHT be semver, might not be. 'x', 'X' => { @@ -1049,23 +1049,33 @@ const Npm = struct { } const releases = this.pkg.releases.keys.get(this.versions); - const prereleases = this.pkg.prereleases.keys.get(this.versions); - - var i = releases.len; - // // For now, this is the dumb way - while (i > 0) : (i -= 1) { - const version = releases[i - 1]; - if (group.satisfies(version)) { - return FindResult{ .version = version, .package = &this.pkg.releases.values.mut(this.package_versions)[i] }; + + if (group.flags.isSet(Semver.Query.Group.Flags.pre)) { + const prereleases = this.pkg.prereleases.keys.get(this.versions); + var i = prereleases.len; + while (i > 0) : (i -= 1) { + const version = prereleases[i - 1]; + const packages = this.pkg.prereleases.values.get(this.package_versions); + + if (group.satisfies(version)) { + return FindResult{ .version = version, .package = &packages[i - 1] }; + } } } - i = prereleases.len; - while (i > 0) : (i -= 1) { - const version = prereleases[i - 1]; - if (group.satisfies(version)) { - return FindResult{ .version = version, .package = &this.pkg.releases.values.mut(this.package_versions)[i] }; + + { + var i = releases.len; + // // For now, this is the dumb way + while (i > 0) : (i -= 1) { + const version = releases[i - 1]; + const packages = this.pkg.releases.values.get(this.package_versions); + + if (group.satisfies(version)) { + return FindResult{ .version = version, .package = &packages[i - 1] }; + } } } + return null; } @@ -1388,15 +1398,15 @@ const Npm = struct { unique_string_count += @as(usize, @boolToInt(!name_entry.found_existing)) + @as(usize, @boolToInt(!version_entry.found_existing)); unique_string_len += @as(usize, @boolToInt(!name_entry.found_existing) * name_str.len) + @as(usize, @boolToInt(!version_entry.found_existing) * version_str.len); - if (!name_entry.found_existing) { - const name_hash = std.hash.Wyhash.hash(0, name_str); - name_entry.value_ptr.* = ExternalString.init(string_buf, string_builder.append(name_str), name_hash); - } + // if (!name_entry.found_existing) { + const name_hash = std.hash.Wyhash.hash(0, name_str); + name_entry.value_ptr.* = ExternalString.init(string_buf, string_builder.append(name_str), name_hash); + // } - if (!version_entry.found_existing) { - const version_hash = std.hash.Wyhash.hash(0, version_str); - version_entry.value_ptr.* = ExternalString.init(string_buf, string_builder.append(version_str), version_hash); - } + // if (!version_entry.found_existing) { + const version_hash = std.hash.Wyhash.hash(0, version_str); + version_entry.value_ptr.* = ExternalString.init(string_buf, string_builder.append(version_str), version_hash); + // } this_versions[i] = version_entry.value_ptr.*; this_names[i] = name_entry.value_ptr.*; @@ -1813,6 +1823,12 @@ const TarballDownload = struct { if (folder_name.len == 0 or (folder_name.len == 1 and folder_name[0] == '/')) @panic("Tried to delete root and stopped it"); PackageManager.instance.cache_directory.deleteTree(folder_name) catch {}; + // e.g. @next + // if it's a namespace package, we need to make sure the @name folder exists + if (basename.len != this.name.len) { + PackageManager.instance.cache_directory.makeDir(std.mem.trim(u8, this.name[0 .. this.name.len - basename.len], "/")) catch {}; + } + // Now that we've extracted the archive, we rename. std.os.renameatZ(tmpdir.fd, tmpname, PackageManager.instance.cache_directory.fd, folder_name) catch |err| { Output.prettyErrorln( |