diff --git a/src/cli/build_command.zig b/src/cli/build_command.zig index ec05e81a48..000c8e6299 100644 --- a/src/cli/build_command.zig +++ b/src/cli/build_command.zig @@ -346,7 +346,7 @@ pub const BuildCommand = struct { var had_err = false; dump: { defer Output.flush(); - var writer = Output.writer(); + var writer = Output.writerBuffered(); var output_dir = this_transpiler.options.output_dir; const will_be_one_file = diff --git a/src/cli/init_command.zig b/src/cli/init_command.zig index 51cb2b146d..72159acb17 100644 --- a/src/cli/init_command.zig +++ b/src/cli/init_command.zig @@ -619,7 +619,7 @@ pub const InitCommand = struct { .blank => template = .blank, } - try Output.writer().writeAll("\n"); + Output.print("\n", .{}); Output.flush(); } else { Output.note("package.json already exists, configuring existing project", .{}); diff --git a/src/ini.zig b/src/ini.zig index b72d81b497..c1b4fbc539 100644 --- a/src/ini.zig +++ b/src/ini.zig @@ -1031,9 +1031,21 @@ pub fn loadNpmrc( } } - if (out.get("ignore-scripts")) |ignore_scripts| { - if (ignore_scripts.isBoolean()) { - install.ignore_scripts = ignore_scripts.data.e_boolean.value; + if (out.get("ignore-scripts")) |*ignore_scripts| { + if (ignore_scripts.asBool()) |ignore| { + install.ignore_scripts = ignore; + } + } + + if (out.get("link-workspace-packages")) |*link_workspace_packages| { + if (link_workspace_packages.asBool()) |link| { + install.link_workspace_packages = link; + } + } + + if (out.get("save-exact")) |*save_exact| { + if (save_exact.asBool()) |exact| { + install.exact = exact; } } diff --git a/src/install/PackageManager/install_with_manager.zig b/src/install/PackageManager/install_with_manager.zig index c68a904239..d2c6bb16ce 100644 --- a/src/install/PackageManager/install_with_manager.zig +++ b/src/install/PackageManager/install_with_manager.zig @@ -867,6 +867,8 @@ fn printInstallSummary( did_meta_hash_change: bool, log_level: Options.LogLevel, ) !void { + defer Output.flush(); + var printed_timestamp = false; if (this.options.do.summary) { var printer = Lockfile.Printer{ @@ -876,10 +878,17 @@ fn printInstallSummary( .successfully_installed = install_summary.successfully_installed, }; - switch (Output.enable_ansi_colors) { - inline else => |enable_ansi_colors| { - try Lockfile.Printer.Tree.print(&printer, this, Output.WriterType, Output.writer(), enable_ansi_colors, log_level); - }, + { + Output.flush(); + // Ensure at this point buffering is enabled. + // We deliberately do not disable it after this. + Output.enableBuffering(); + const writer = Output.writerBuffered(); + switch (Output.enable_ansi_colors) { + inline else => |enable_ansi_colors| { + try Lockfile.Printer.Tree.print(&printer, this, @TypeOf(writer), writer, enable_ansi_colors, log_level); + }, + } } if (!did_meta_hash_change) { diff --git a/src/install/isolated_install.zig b/src/install/isolated_install.zig index 5052fa7a50..8af13c96d1 100644 --- a/src/install/isolated_install.zig +++ b/src/install/isolated_install.zig @@ -691,6 +691,11 @@ pub fn installIsolatedPackages( var store_path: bun.AbsPath(.{}) = .initTopLevelDir(); defer store_path.deinit(); installer.appendStorePath(&store_path, entry_id); + const scope_for_patch_tag_path = store_path.save(); + if (pkg_res_tag == .npm) + // if it's from npm, it should always have a package.json. + // in other cases, probably yes but i'm less confident. + store_path.append("package.json"); const exists = sys.existsZ(store_path.sliceZ()); break :needs_install switch (patch_info) { @@ -700,11 +705,9 @@ pub fn installIsolatedPackages( .patch => |patch| { var hash_buf: install.BuntagHashBuf = undefined; const hash = install.buntaghashbuf_make(&hash_buf, patch.contents_hash); - var patch_tag_path: bun.AbsPath(.{}) = .initTopLevelDir(); - defer patch_tag_path.deinit(); - installer.appendStorePath(&patch_tag_path, entry_id); - patch_tag_path.append(hash); - break :needs_install !sys.existsZ(patch_tag_path.sliceZ()); + scope_for_patch_tag_path.restore(); + store_path.append(hash); + break :needs_install !sys.existsZ(store_path.sliceZ()); }, }; }; diff --git a/src/install/lockfile.zig b/src/install/lockfile.zig index 209af71f1a..e4f346b908 100644 --- a/src/install/lockfile.zig +++ b/src/install/lockfile.zig @@ -1032,7 +1032,7 @@ pub const Printer = struct { .ok => {}, } - const writer = Output.writer(); + const writer = Output.writerBuffered(); try printWithLockfile(allocator, lockfile, format, @TypeOf(writer), writer); Output.flush(); } diff --git a/src/output.zig b/src/output.zig index 6fc7f6a356..8f82c7be1a 100644 --- a/src/output.zig +++ b/src/output.zig @@ -515,6 +515,11 @@ pub fn writer() WriterType { return source.stream.quietWriter(); } +pub fn writerBuffered() Source.BufferedStream.Writer { + bun.debugAssert(source_set); + return source.buffered_stream.writer(); +} + pub fn resetTerminal() void { if (!enable_ansi_colors) { return;