Compare commits

...

1 Commits

Author SHA1 Message Date
Dylan Conway
410a0ba884 allocate once 2024-11-19 21:38:23 -08:00
3 changed files with 36 additions and 11 deletions

View File

@@ -7101,7 +7101,7 @@ pub const PackageManager = struct {
maybe_cli: ?CommandLineArguments,
bun_install_: ?*Api.BunInstall,
subcommand: Subcommand,
) !void {
) bun.OOM!void {
var base = Api.NpmRegistry{
.url = "",
.username = "",
@@ -8805,7 +8805,26 @@ pub const PackageManager = struct {
allocator: std.mem.Allocator,
cli: CommandLineArguments,
env: *DotEnv.Loader,
) !*PackageManager {
) *PackageManager {
init_with_runtime_once.call(.{
log,
bun_install,
allocator,
cli,
env,
});
return PackageManager.get();
}
var init_with_runtime_once = bun.once(initWithRuntimeOnce);
pub fn initWithRuntimeOnce(
log: *logger.Log,
bun_install: ?*Api.BunInstall,
allocator: std.mem.Allocator,
cli: CommandLineArguments,
env: *DotEnv.Loader,
) void {
if (env.get("BUN_INSTALL_VERBOSE") != null) {
PackageManager.verbose_install = true;
}
@@ -8813,12 +8832,16 @@ pub const PackageManager = struct {
const cpu_count = bun.getThreadCount();
PackageManager.allocatePackageManager();
const manager = PackageManager.get();
var root_dir = try Fs.FileSystem.instance.fs.readDirectory(
var root_dir = Fs.FileSystem.instance.fs.readDirectory(
Fs.FileSystem.instance.top_level_dir,
null,
0,
true,
);
) catch |err| {
Output.err(err, "failed to read root directory: '{s}'", .{Fs.FileSystem.instance.top_level_dir});
@panic("Failed to initialize package manager");
};
// var progress = Progress{};
// var node = progress.start(name: []const u8, estimated_total_items: usize)
const top_level_dir_no_trailing_slash = strings.withoutTrailingSlash(Fs.FileSystem.instance.top_level_dir);
@@ -8847,7 +8870,7 @@ pub const PackageManager = struct {
.original_package_json_path = original_package_json_path[0..original_package_json_path.len :0],
.subcommand = .install,
};
manager.lockfile = try allocator.create(Lockfile);
manager.lockfile = allocator.create(Lockfile) catch bun.outOfMemory();
if (Output.enable_ansi_colors_stderr) {
manager.progress = Progress{};
@@ -8875,14 +8898,18 @@ pub const PackageManager = struct {
}
}
try manager.options.load(
manager.options.load(
allocator,
log,
env,
cli,
bun_install,
.install,
);
) catch |err| {
switch (err) {
error.OutOfMemory => bun.outOfMemory(),
}
};
manager.timestamp_for_manifest_cache_control = @as(
u32,
@@ -8924,8 +8951,6 @@ pub const PackageManager = struct {
} else {
manager.lockfile.initEmpty(allocator);
}
return manager;
}
fn attemptToCreatePackageJSONAndOpen() !std.fs.File {

View File

@@ -275,7 +275,7 @@ pub const Registry = struct {
return name[1..];
}
pub fn fromAPI(name: string, registry_: Api.NpmRegistry, allocator: std.mem.Allocator, env: *DotEnv.Loader) !Scope {
pub fn fromAPI(name: string, registry_: Api.NpmRegistry, allocator: std.mem.Allocator, env: *DotEnv.Loader) OOM!Scope {
var registry = registry_;
// Support $ENV_VAR for registry URLs

View File

@@ -573,7 +573,7 @@ pub const Resolver = struct {
.{},
this.env_loader.?,
) catch @panic("Failed to initialize package manager");
);
pm.onWake = this.onWakePackageManager;
this.package_manager = pm;
break :brk pm;