aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar WingLim <winglims@gmail.com> 2023-09-20 07:54:54 +0800
committerGravatar GitHub <noreply@github.com> 2023-09-19 16:54:54 -0700
commitddb1189b2d67fcec3d5821930e3c7b1f865a5c48 (patch)
tree5fe4cfcd397821a791a56f4595fa6e165f030c3a
parent4fce34854be8e1f29bf89f02f7a2541ef5e1d3a8 (diff)
downloadbun-ddb1189b2d67fcec3d5821930e3c7b1f865a5c48.tar.gz
bun-ddb1189b2d67fcec3d5821930e3c7b1f865a5c48.tar.zst
bun-ddb1189b2d67fcec3d5821930e3c7b1f865a5c48.zip
fix(cli): `bun pm cache rm` command not work (#4571)
* fix(cli): rm arg is in positionals[1] * chore(cli): add cache remove test * chore: remvoe unnecessary join * chore: run formatter --------- Co-authored-by: dave caruso <me@paperdave.net>
-rw-r--r--src/cli/package_manager_command.zig2
-rw-r--r--test/cli/install/bun-pm.test.ts89
2 files changed, 89 insertions, 2 deletions
diff --git a/src/cli/package_manager_command.zig b/src/cli/package_manager_command.zig
index a70dec020..aef7c28a9 100644
--- a/src/cli/package_manager_command.zig
+++ b/src/cli/package_manager_command.zig
@@ -162,7 +162,7 @@ pub const PackageManagerCommand = struct {
Global.crash();
};
- if (pm.options.positionals.len > 0 and strings.eqlComptime(pm.options.positionals[0], "rm")) {
+ if (pm.options.positionals.len > 1 and strings.eqlComptime(pm.options.positionals[1], "rm")) {
std.fs.deleteTreeAbsolute(outpath) catch |err| {
Output.prettyErrorln("{s} deleting cache directory", .{@errorName(err)});
Global.crash();
diff --git a/test/cli/install/bun-pm.test.ts b/test/cli/install/bun-pm.test.ts
index 23b73dfae..9729ada7b 100644
--- a/test/cli/install/bun-pm.test.ts
+++ b/test/cli/install/bun-pm.test.ts
@@ -1,7 +1,7 @@
import { spawn } from "bun";
import { afterAll, afterEach, beforeAll, beforeEach, expect, it } from "bun:test";
import { bunExe, bunEnv as env } from "harness";
-import { mkdir, writeFile } from "fs/promises";
+import { mkdir, writeFile, exists } from "fs/promises";
import { join } from "path";
import {
dummyAfterAll,
@@ -10,6 +10,7 @@ import {
dummyBeforeEach,
dummyRegistry,
package_dir,
+ readdirSorted,
requested,
root_url,
setHandler,
@@ -245,3 +246,89 @@ it("should list aliased dependencies", async () => {
expect(urls.sort()).toEqual([]);
expect(requested).toBe(2);
});
+
+it("should remove all cache", async () => {
+ const urls: string[] = [];
+ setHandler(dummyRegistry(urls));
+ await writeFile(
+ join(package_dir, "package.json"),
+ JSON.stringify({
+ name: "foo",
+ version: "0.0.1",
+ dependencies: {
+ "moo-1": "./moo",
+ },
+ }),
+ );
+ await mkdir(join(package_dir, "moo"));
+ await writeFile(
+ join(package_dir, "moo", "package.json"),
+ JSON.stringify({
+ name: "moo",
+ version: "0.1.0",
+ dependencies: {
+ "bar-1": "npm:bar",
+ },
+ }),
+ );
+ let cache_dir: string = join(package_dir, "node_modules", ".cache");
+ expect(
+ await spawn({
+ cmd: [bunExe(), "install"],
+ cwd: package_dir,
+ stdout: null,
+ stdin: "pipe",
+ stderr: "pipe",
+ env: {
+ ...env,
+ BUN_INSTALL_CACHE_DIR: cache_dir,
+ },
+ }).exited,
+ ).toBe(0);
+ expect(urls.sort()).toEqual([`${root_url}/bar`, `${root_url}/bar-0.0.2.tgz`]);
+ expect(requested).toBe(2);
+ expect(await readdirSorted(cache_dir)).toContain("bar");
+
+ const {
+ stdout: stdout1,
+ stderr: stderr1,
+ exited: exited1,
+ } = spawn({
+ cmd: [bunExe(), "pm", "cache"],
+ cwd: package_dir,
+ stdout: "pipe",
+ stdin: "pipe",
+ stderr: "pipe",
+ env: {
+ ...env,
+ BUN_INSTALL_CACHE_DIR: cache_dir,
+ },
+ });
+ expect(stderr1).toBeDefined();
+ expect(await new Response(stderr1).text()).toBe("");
+ expect(stdout1).toBeDefined();
+ expect(await new Response(stdout1).text()).toBe(cache_dir);
+ expect(await exited1).toBe(0);
+
+ const {
+ stdout: stdout2,
+ stderr: stderr2,
+ exited: exited2,
+ } = spawn({
+ cmd: [bunExe(), "pm", "cache", "rm"],
+ cwd: package_dir,
+ stdout: "pipe",
+ stdin: "pipe",
+ stderr: "pipe",
+ env: {
+ ...env,
+ BUN_INSTALL_CACHE_DIR: cache_dir,
+ },
+ });
+ expect(stderr2).toBeDefined();
+ expect(await new Response(stderr2).text()).toBe("");
+ expect(stdout2).toBeDefined();
+ expect(await new Response(stdout2).text()).toBe("Cache directory deleted:\n " + cache_dir + "\n");
+ expect(await exited2).toBe(0);
+ expect(await exists(cache_dir)).toBeFalse();
+});