aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/install/install.zig62
1 files changed, 48 insertions, 14 deletions
diff --git a/src/install/install.zig b/src/install/install.zig
index 9c6fa7948..1391428e9 100644
--- a/src/install/install.zig
+++ b/src/install/install.zig
@@ -994,6 +994,7 @@ pub const Lockfile = struct {
pub const Printer = struct {
lockfile: *Lockfile,
options: PackageManager.Options,
+ successfully_installed: ?std.DynamicBitSetUnmanaged = null,
pub const Format = enum { yarn };
@@ -1143,6 +1144,46 @@ pub const Lockfile = struct {
visited.set(0);
const end = @truncate(PackageID, names.len);
+ if (this.successfully_installed) |installed| {
+ for (resolutions_list[0].get(resolutions_buffer)) |package_id| {
+ if (package_id > end or !installed.isSet(package_id)) continue;
+
+ const package_name = names[package_id].slice(string_buf);
+
+ const dependency_list = dependency_lists[package_id];
+
+ const fmt = comptime brk: {
+ if (enable_ansi_colors) {
+ break :brk Output.prettyFmt("<r> 💾 <b>{s}<r><d>@{}<r>\n", enable_ansi_colors);
+ } else {
+ break :brk Output.prettyFmt("<r> + {s}<r><d>@{}<r>\n", enable_ansi_colors);
+ }
+ };
+
+ try writer.print(
+ fmt,
+ .{
+ package_name,
+ resolved[package_id].fmt(string_buf),
+ },
+ );
+ }
+ } else {
+ for (names) |name, package_id| {
+ const package_name = name.slice(string_buf);
+
+ const dependency_list = dependency_lists[package_id];
+
+ try writer.print(
+ comptime Output.prettyFmt(" <r><b>{s}<r><d>@<b>{}<r>\n", enable_ansi_colors),
+ .{
+ package_name,
+ resolved[package_id].fmt(string_buf),
+ },
+ );
+ }
+ }
+
for (resolutions_list) |list, parent_id| {
for (list.get(resolutions_buffer)) |package_id, j| {
if (package_id >= end) {
@@ -1161,19 +1202,6 @@ pub const Lockfile = struct {
);
continue;
}
- const name = names[package_id];
- const package_name = name.slice(string_buf);
-
- const dependency_list = dependency_lists[package_id];
-
- try writer.print(
- comptime Output.prettyFmt(" <r><b>{s}<r><d>@<b>{}<r><d> ({d} dependencies)<r>\n", enable_ansi_colors),
- .{
- package_name,
- resolved[package_id].fmt(string_buf),
- dependency_list.len,
- },
- );
}
}
}
@@ -3098,6 +3126,7 @@ const PackageInstall = struct {
fail: u32 = 0,
success: u32 = 0,
skipped: u32 = 0,
+ successfully_installed: ?std.DynamicBitSetUnmanaged = null,
};
pub const Method = enum {
@@ -5825,6 +5854,7 @@ pub const PackageManager = struct {
has_created_bin: bool = false,
destination_dir_subpath_buf: [std.fs.MAX_PATH_BYTES]u8 = undefined,
install_count: usize = 0,
+ successfully_installed: std.DynamicBitSetUnmanaged,
// For linking native binaries, we only want to link after we've installed the companion dependencies
// We don't want to introduce dependent callbacks like that for every single package
@@ -5897,6 +5927,7 @@ pub const PackageManager = struct {
switch (result) {
.success => {
this.summary.success += 1;
+ this.successfully_installed.set(package_id);
if (comptime log_level.showProgress()) {
this.node.completeOne();
}
@@ -6105,6 +6136,7 @@ pub const PackageManager = struct {
.summary = &summary,
.force_install = force_install,
.install_count = lockfile.buffers.hoisted_packages.items.len,
+ .successfully_installed = try std.DynamicBitSetUnmanaged.initEmpty(lockfile.packages.len, this.allocator),
};
// When it's a Good Idea, run the install in single-threaded
@@ -6227,6 +6259,7 @@ pub const PackageManager = struct {
}
// }
+ summary.successfully_installed = installer.successfully_installed;
outer: for (installer.platform_binlinks.items) |deferred| {
const package_id = deferred.package_id;
const folder = deferred.node_modules_folder;
@@ -6565,7 +6598,7 @@ pub const PackageManager = struct {
std.os.exit(1);
}
- if (had_any_diffs or needs_new_lockfile) {
+ if (had_any_diffs or needs_new_lockfile or manager.package_json_updates.len > 0) {
manager.lockfile = try manager.lockfile.clean(&manager.summary.deduped, manager.package_json_updates, &manager.options);
}
@@ -6619,6 +6652,7 @@ pub const PackageManager = struct {
var printer = Lockfile.Printer{
.lockfile = manager.lockfile,
.options = manager.options,
+ .successfully_installed = install_summary.successfully_installed,
};
if (Output.enable_ansi_colors) {
try Lockfile.Printer.Tree.print(&printer, Output.WriterType, Output.writer(), true);