mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 10:28:47 +00:00
fix editing package json when adding github dependency (#6432)
* fix package name added to package json * check for github tag * remove alloc * some tests * fix test
This commit is contained in:
@@ -236,6 +236,8 @@ pub const BunxCommand = struct {
|
||||
|
||||
const initial_bin_name = if (strings.eqlComptime(update_request.name, "typescript"))
|
||||
"tsc"
|
||||
else if (update_request.version.tag == .github)
|
||||
update_request.version.value.github.repo.slice(update_request.version_buf)
|
||||
else if (strings.lastIndexOfChar(update_request.name, '/')) |index|
|
||||
update_request.name[index + 1 ..]
|
||||
else
|
||||
@@ -262,19 +264,19 @@ pub const BunxCommand = struct {
|
||||
else
|
||||
update_request.version.literal.slice(update_request.version_buf);
|
||||
|
||||
const package_fmt: []const u8 = brk: {
|
||||
if (!strings.eql(update_request.version_buf, update_request.name)) {
|
||||
break :brk try std.fmt.allocPrint(
|
||||
ctx.allocator,
|
||||
"{s}@{s}",
|
||||
.{
|
||||
update_request.name,
|
||||
display_version,
|
||||
},
|
||||
);
|
||||
const package_fmt = brk: {
|
||||
if (update_request.version.tag == .github) {
|
||||
break :brk update_request.version.literal.slice(update_request.version_buf);
|
||||
}
|
||||
|
||||
break :brk update_request.name;
|
||||
break :brk try std.fmt.allocPrint(
|
||||
ctx.allocator,
|
||||
"{s}@{s}",
|
||||
.{
|
||||
update_request.name,
|
||||
display_version,
|
||||
},
|
||||
);
|
||||
};
|
||||
|
||||
const PATH_FOR_BIN_DIRS = PATH;
|
||||
|
||||
@@ -6370,7 +6370,6 @@ pub const PackageManager = struct {
|
||||
request.name = allocator.dupe(u8, name) catch unreachable;
|
||||
request.name_hash = String.Builder.stringHash(name);
|
||||
} else if (version.tag == .github and version.value.github.committish.isEmpty()) {
|
||||
request.name = input;
|
||||
request.name_hash = String.Builder.stringHash(version.literal.slice(input));
|
||||
} else {
|
||||
request.name_hash = String.Builder.stringHash(version.literal.slice(input));
|
||||
|
||||
@@ -1503,6 +1503,97 @@ it("should handle ^0.0.2 in dependencies", async () => {
|
||||
await access(join(package_dir, "bun.lockb"));
|
||||
});
|
||||
|
||||
it("should edit package json correctly with git dependencies", async () => {
|
||||
const urls: string[] = [];
|
||||
setHandler(dummyRegistry(urls));
|
||||
const package_json = JSON.stringify({
|
||||
name: "foo",
|
||||
version: "0.0.1",
|
||||
dependencies: {},
|
||||
});
|
||||
await writeFile(join(package_dir, "package.json"), package_json);
|
||||
var { stdout, stderr, exited } = spawn({
|
||||
cmd: [bunExe(), "i", "dylan-conway/install-test"],
|
||||
cwd: package_dir,
|
||||
stdout: null,
|
||||
stdin: "pipe",
|
||||
stderr: "pipe",
|
||||
env,
|
||||
});
|
||||
var err = await new Response(stderr).text();
|
||||
expect(err).toContain("Saved lockfile");
|
||||
expect(err).not.toContain("error:");
|
||||
expect(await exited).toBe(0);
|
||||
expect(await file(join(package_dir, "package.json")).json()).toEqual({
|
||||
name: "foo",
|
||||
version: "0.0.1",
|
||||
dependencies: {
|
||||
"install-test": "dylan-conway/install-test",
|
||||
},
|
||||
});
|
||||
await writeFile(join(package_dir, "package.json"), package_json);
|
||||
({ stdout, stderr, exited } = spawn({
|
||||
cmd: [bunExe(), "i", "dylan-conway/install-test#HEAD"],
|
||||
cwd: package_dir,
|
||||
stdout: null,
|
||||
stdin: "pipe",
|
||||
stderr: "pipe",
|
||||
env,
|
||||
}));
|
||||
err = await new Response(stderr).text();
|
||||
expect(err).toContain("Saved lockfile");
|
||||
expect(err).not.toContain("error:");
|
||||
expect(await exited).toBe(0);
|
||||
expect(await file(join(package_dir, "package.json")).json()).toEqual({
|
||||
name: "foo",
|
||||
version: "0.0.1",
|
||||
dependencies: {
|
||||
"install-test": "dylan-conway/install-test#HEAD",
|
||||
},
|
||||
});
|
||||
await writeFile(join(package_dir, "package.json"), package_json);
|
||||
({ stdout, stderr, exited } = spawn({
|
||||
cmd: [bunExe(), "i", "github:dylan-conway/install-test"],
|
||||
cwd: package_dir,
|
||||
stdout: null,
|
||||
stdin: "pipe",
|
||||
stderr: "pipe",
|
||||
env,
|
||||
}));
|
||||
err = await new Response(stderr).text();
|
||||
expect(err).toContain("Saved lockfile");
|
||||
expect(err).not.toContain("error:");
|
||||
expect(await exited).toBe(0);
|
||||
expect(await file(join(package_dir, "package.json")).json()).toEqual({
|
||||
name: "foo",
|
||||
version: "0.0.1",
|
||||
dependencies: {
|
||||
"install-test": "github:dylan-conway/install-test",
|
||||
},
|
||||
});
|
||||
await writeFile(join(package_dir, "package.json"), package_json);
|
||||
({ stdout, stderr, exited } = spawn({
|
||||
cmd: [bunExe(), "i", "github:dylan-conway/install-test#HEAD"],
|
||||
cwd: package_dir,
|
||||
stdout: null,
|
||||
stdin: "pipe",
|
||||
stderr: "pipe",
|
||||
env,
|
||||
}));
|
||||
err = await new Response(stderr).text();
|
||||
expect(err).toContain("Saved lockfile");
|
||||
expect(err).not.toContain("error:");
|
||||
expect(await exited).toBe(0);
|
||||
expect(await file(join(package_dir, "package.json")).json()).toEqual({
|
||||
name: "foo",
|
||||
version: "0.0.1",
|
||||
dependencies: {
|
||||
"install-test": "github:dylan-conway/install-test#HEAD",
|
||||
},
|
||||
});
|
||||
await access(join(package_dir, "bun.lockb"));
|
||||
});
|
||||
|
||||
it("should handle ^0.0.2-rc in dependencies", async () => {
|
||||
const urls: string[] = [];
|
||||
setHandler(dummyRegistry(urls, { "0.0.2-rc": { as: "0.0.2" } }));
|
||||
|
||||
@@ -158,7 +158,7 @@ console.log(
|
||||
});
|
||||
|
||||
it("should work for github repository", async () => {
|
||||
await rm(join(await realpath(tmpdir()), "@withfig"), { force: true, recursive: true });
|
||||
await rm(join(await realpath(tmpdir()), "github:piuccio"), { force: true, recursive: true });
|
||||
// without cache
|
||||
const withoutCache = spawn({
|
||||
cmd: [bunExe(), "x", "github:piuccio/cowsay", "--help"],
|
||||
@@ -195,3 +195,41 @@ it("should work for github repository", async () => {
|
||||
expect(out.trim()).toContain("Usage: cowsay");
|
||||
expect(await cached.exited).toBe(0);
|
||||
});
|
||||
|
||||
it("should work for github repository with committish", async () => {
|
||||
await rm(join(await realpath(tmpdir()), "github:piuccio"), { force: true, recursive: true });
|
||||
const withoutCache = spawn({
|
||||
cmd: [bunExe(), "x", "github:piuccio/cowsay#HEAD", "hello bun!"],
|
||||
cwd: x_dir,
|
||||
stdout: null,
|
||||
stdin: "pipe",
|
||||
stderr: "pipe",
|
||||
env,
|
||||
});
|
||||
|
||||
expect(withoutCache.stderr).toBeDefined();
|
||||
let err = await new Response(withoutCache.stderr).text();
|
||||
expect(err).not.toContain("error");
|
||||
expect(withoutCache.stdout).toBeDefined();
|
||||
let out = await new Response(withoutCache.stdout).text();
|
||||
expect(out.trim()).toContain("hello bun!");
|
||||
expect(await withoutCache.exited).toBe(0);
|
||||
|
||||
// cached
|
||||
const cached = spawn({
|
||||
cmd: [bunExe(), "x", "github:piuccio/cowsay#HEAD", "hello bun!"],
|
||||
cwd: x_dir,
|
||||
stdout: null,
|
||||
stdin: "pipe",
|
||||
stderr: "pipe",
|
||||
env,
|
||||
});
|
||||
|
||||
expect(cached.stderr).toBeDefined();
|
||||
err = await new Response(cached.stderr).text();
|
||||
expect(err).not.toContain("error");
|
||||
expect(cached.stdout).toBeDefined();
|
||||
out = await new Response(cached.stdout).text();
|
||||
expect(out.trim()).toContain("hello bun!");
|
||||
expect(await cached.exited).toBe(0);
|
||||
});
|
||||
|
||||
@@ -603,7 +603,9 @@ describe("jest-extended", () => {
|
||||
);
|
||||
|
||||
expect("hello world").not.toEqualIgnoringWhitespace("hello world!");
|
||||
expect({}).not.toEqualIgnoringWhitespace({});
|
||||
expect(() => {
|
||||
expect({}).not.toEqualIgnoringWhitespace({});
|
||||
}).toThrow("requires argument to be a string");
|
||||
});
|
||||
|
||||
// Symbol
|
||||
|
||||
Reference in New Issue
Block a user