aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2023-06-25 04:52:43 -0700
committerGravatar GitHub <noreply@github.com> 2023-06-25 04:52:43 -0700
commitc4c714f10b033d1317cc609ded7310d3b0e2a8cc (patch)
tree475be8a6ccf9a18ef3eff1015a406c8a6b003080 /src
parentf8abd167d86b94da817d91631ef0137b019a9999 (diff)
downloadbun-c4c714f10b033d1317cc609ded7310d3b0e2a8cc.tar.gz
bun-c4c714f10b033d1317cc609ded7310d3b0e2a8cc.tar.zst
bun-c4c714f10b033d1317cc609ded7310d3b0e2a8cc.zip
Speculative fix for regression causing a hang with `install --production` (#3400)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Diffstat (limited to 'src')
-rw-r--r--src/install/lockfile.zig52
1 files changed, 26 insertions, 26 deletions
diff --git a/src/install/lockfile.zig b/src/install/lockfile.zig
index 04c6ccec1..ce9199ab3 100644
--- a/src/install/lockfile.zig
+++ b/src/install/lockfile.zig
@@ -343,31 +343,23 @@ pub const Tree = struct {
dependencies: []const Dependency,
resolution_lists: []const Lockfile.DependencyIDSlice,
queue: Lockfile.TreeFiller,
- log: ?*logger.Log = null,
- old_lockfile: ?*Lockfile = null,
+ log: *logger.Log,
+ old_lockfile: *Lockfile,
pub fn maybeReportError(this: *Builder, comptime fmt: string, args: anytype) void {
- var log = this.log orelse return;
- if (this.old_lockfile == null) return;
-
- log.addErrorFmt(null, logger.Loc.Empty, this.allocator, fmt, args) catch {};
+ this.log.addErrorFmt(null, logger.Loc.Empty, this.allocator, fmt, args) catch {};
}
pub fn buf(this: *const Builder) []const u8 {
- var lockfile = this.old_lockfile orelse return "";
- return lockfile.buffers.string_bytes.items;
+ return this.old_lockfile.buffers.string_bytes.items;
}
pub fn packageName(this: *Builder, id: PackageID) String.Formatter {
- var lockfile = this.old_lockfile orelse return undefined;
-
- return lockfile.packages.items(.name)[id].fmt(lockfile.buffers.string_bytes.items);
+ return this.old_lockfile.packages.items(.name)[id].fmt(this.old_lockfile.buffers.string_bytes.items);
}
pub fn packageVersion(this: *Builder, id: PackageID) Resolution.Formatter {
- var lockfile = this.old_lockfile orelse return undefined;
-
- return lockfile.packages.items(.resolution)[id].fmt(lockfile.buffers.string_bytes.items);
+ return this.old_lockfile.packages.items(.resolution)[id].fmt(this.old_lockfile.buffers.string_bytes.items);
}
pub const Entry = struct {
@@ -499,15 +491,14 @@ pub const Tree = struct {
if (dep.name_hash != dependency.name_hash) continue;
if (builder.resolutions[dep_id] != package_id) {
if (as_defined and !dep.behavior.isPeer()) {
- if (builder.log != null)
- builder.maybeReportError("Package \"{}@{}\" has a dependency loop\n Resolution: \"{}@{}\"\n Dependency: \"{}@{}\"", .{
- builder.packageName(package_id),
- builder.packageVersion(package_id),
- builder.packageName(builder.resolutions[dep_id]),
- builder.packageVersion(builder.resolutions[dep_id]),
- dependency.name.fmt(builder.buf()),
- dependency.version.literal.fmt(builder.buf()),
- });
+ builder.maybeReportError("Package \"{}@{}\" has a dependency loop\n Resolution: \"{}@{}\"\n Dependency: \"{}@{}\"", .{
+ builder.packageName(package_id),
+ builder.packageVersion(package_id),
+ builder.packageName(builder.resolutions[dep_id]),
+ builder.packageVersion(builder.resolutions[dep_id]),
+ dependency.name.fmt(builder.buf()),
+ dependency.version.literal.fmt(builder.buf()),
+ });
return error.DependencyLoop;
}
// ignore versioning conflicts caused by peer dependencies
@@ -629,10 +620,19 @@ fn preprocessUpdateRequests(old: *Lockfile, updates: []PackageManager.UpdateRequ
}
}
pub fn clean(old: *Lockfile, updates: []PackageManager.UpdateRequest) !*Lockfile {
- return old.cleanWithLogger(updates, null);
+ // This is wasteful, but we rarely log anything so it's fine.
+ var log = logger.Log.init(bun.default_allocator);
+ defer {
+ for (log.msgs.items) |*item| {
+ item.deinit(bun.default_allocator);
+ }
+ log.deinit();
+ }
+
+ return old.cleanWithLogger(updates, &log);
}
-pub fn cleanWithLogger(old: *Lockfile, updates: []PackageManager.UpdateRequest, log: ?*logger.Log) !*Lockfile {
+pub fn cleanWithLogger(old: *Lockfile, updates: []PackageManager.UpdateRequest, log: *logger.Log) !*Lockfile {
const old_scripts = old.scripts;
// We will only shrink the number of packages here.
// never grow
@@ -780,7 +780,7 @@ const Cloner = struct {
mapping: []PackageID,
trees: Tree.List = Tree.List{},
trees_count: u32 = 1,
- log: ?*logger.Log = null,
+ log: *logger.Log,
pub fn flush(this: *Cloner) anyerror!void {
const max_package_id = this.old.packages.len;