aboutsummaryrefslogtreecommitdiff
path: root/src/install
diff options
context:
space:
mode:
Diffstat (limited to 'src/install')
-rw-r--r--src/install/extract_tarball.zig2
-rw-r--r--src/install/install.zig26
-rw-r--r--src/install/npm.zig21
3 files changed, 29 insertions, 20 deletions
diff --git a/src/install/extract_tarball.zig b/src/install/extract_tarball.zig
index 5594ff0b1..22b4d7592 100644
--- a/src/install/extract_tarball.zig
+++ b/src/install/extract_tarball.zig
@@ -250,7 +250,7 @@ fn extract(this: *const ExtractTarball, tgz_bytes: []const u8) !string {
// We return a resolved absolute absolute file path to the cache dir.
// To get that directory, we open the directory again.
- var final_dir = cache_dir.openDirZ(folder_name, .{ .iterate = true }) catch |err| {
+ var final_dir = cache_dir.openDirZ(folder_name, .{ .iterate = false }) catch |err| {
Output.prettyErrorln(
"<r><red>Error {s}<r> failed to verify cache dir for {s}",
.{
diff --git a/src/install/install.zig b/src/install/install.zig
index a8446efd0..051eec1f4 100644
--- a/src/install/install.zig
+++ b/src/install/install.zig
@@ -179,9 +179,8 @@ const NetworkTask = struct {
binlink: void,
},
- pub fn notify(http: *AsyncHTTP, sender: *AsyncHTTP.HTTPSender) void {
+ pub fn notify(http: *AsyncHTTP) void {
PackageManager.instance.network_channel.writeItem(@fieldParentPtr(NetworkTask, "http", http)) catch {};
- sender.onFinish();
}
const default_headers_buf: string = "Acceptapplication/vnd.npm.install-v1+json";
@@ -3884,7 +3883,7 @@ pub const PackageManager = struct {
pub fn isFolderInCache(this: *PackageManager, folder_path: stringZ) bool {
// TODO: is this slow?
- var dir = this.getCacheDirectory().openDirZ(folder_path, .{ .iterate = true }) catch return false;
+ var dir = this.getCacheDirectory().openDirZ(folder_path, .{ .iterate = false }) catch return false;
dir.close();
return true;
}
@@ -4356,11 +4355,6 @@ pub const PackageManager = struct {
_ = this.network_dedupe_map.remove(task_id);
continue :retry_from_manifests_ptr;
}
-
- // We want to make sure the temporary directory & cache directory are loaded on the main thread
- // so that we don't run into weird threading issues
- // the call to getCacheDirectory() above handles the cache dir
- _ = this.getTemporaryDirectory();
}
}
@@ -5299,7 +5293,7 @@ pub const PackageManager = struct {
comptime params: []const ParamType,
) !*PackageManager {
// assume that spawning a thread will take a lil so we do that asap
- try NetworkThread.init();
+ try NetworkThread.warmup();
var cli = try CommandLineArguments.parse(ctx.allocator, params);
@@ -6092,6 +6086,7 @@ pub const PackageManager = struct {
std.mem.copy(u8, &node_modules_buf, entry.name);
node_modules_buf[entry.name.len] = 0;
var buf: [:0]u8 = node_modules_buf[0..entry.name.len :0];
+
var file = node_modules_bin.openFileZ(buf, .{ .read = true }) catch {
node_modules_bin.deleteFileZ(buf) catch {};
continue :iterator;
@@ -6793,6 +6788,9 @@ pub const PackageManager = struct {
var deps = &manager.lockfile.buffers.dependencies;
var res = &manager.lockfile.buffers.resolutions;
+ _ = manager.getCacheDirectory();
+ _ = manager.getTemporaryDirectory();
+
while (std.mem.indexOfScalar(PackageID, remaining, invalid_package_id)) |next_i_| {
remaining = remaining[next_i_ + 1 ..];
@@ -6834,6 +6832,11 @@ pub const PackageManager = struct {
root = try manager.lockfile.appendPackage(root);
manager.root_dependency_list = root.dependencies;
+
+ if (root.dependencies.len > 0) {
+ _ = manager.getCacheDirectory();
+ _ = manager.getTemporaryDirectory();
+ }
manager.enqueueDependencyList(
root.dependencies,
true,
@@ -6846,6 +6849,11 @@ pub const PackageManager = struct {
_ = manager.scheduleNetworkTasks();
if (manager.pending_tasks > 0) {
+ if (root.dependencies.len > 0) {
+ _ = manager.getCacheDirectory();
+ _ = manager.getTemporaryDirectory();
+ }
+
if (comptime log_level.showProgress()) {
manager.downloads_node = try manager.progress.start(ProgressStrings.download(), 0);
manager.progress.supports_ansi_escape_codes = Output.enable_ansi_colors_stderr;
diff --git a/src/install/npm.zig b/src/install/npm.zig
index 61e2b064c..65bf61602 100644
--- a/src/install/npm.zig
+++ b/src/install/npm.zig
@@ -457,6 +457,16 @@ pub const PackageManifest = struct {
}
}
+ fn writeFile(this: *const PackageManifest, tmp_path: [:0]const u8, tmpdir: std.fs.Dir) !void {
+ var tmpfile = try tmpdir.createFileZ(tmp_path, .{
+ .truncate = true,
+ });
+ defer tmpfile.close();
+ var writer = tmpfile.writer();
+ try Serializer.write(this, @TypeOf(writer), writer);
+ std.os.fdatasync(tmpfile.handle) catch {};
+ }
+
pub fn save(this: *const PackageManifest, tmpdir: std.fs.Dir, cache_dir: std.fs.Dir) !void {
const file_id = std.hash.Wyhash.hash(0, this.name());
var dest_path_buf: [512 + 64]u8 = undefined;
@@ -466,16 +476,7 @@ pub const PackageManifest = struct {
try dest_path_stream_writer.print("{x}.npm-{x}", .{ file_id, @maximum(std.time.milliTimestamp(), 0) });
try dest_path_stream_writer.writeByte(0);
var tmp_path: [:0]u8 = dest_path_buf[0 .. dest_path_stream.pos - 1 :0];
- {
- var tmpfile = try tmpdir.createFileZ(tmp_path, .{
- .truncate = true,
- });
- var writer = tmpfile.writer();
- try Serializer.write(this, @TypeOf(writer), writer);
- std.os.fdatasync(tmpfile.handle) catch {};
- tmpfile.close();
- }
-
+ try writeFile(this, tmp_path, tmpdir);
var out_path = std.fmt.bufPrintZ(&out_path_buf, "{x}.npm", .{file_id}) catch unreachable;
try std.os.renameatZ(tmpdir.fd, tmp_path, cache_dir.fd, out_path);
}