diff --git a/CHANGELOG.md b/CHANGELOG.md index 84de517..65b9e9c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 1.0.2 + +- Don’t prune targets that have a different name from the crate, but do prune targets from the workspace. + ## 1.0.1 - Improved logging output. diff --git a/dist/save/index.js b/dist/save/index.js index 01b54ec..16b1fe2 100644 --- a/dist/save/index.js +++ b/dist/save/index.js @@ -54793,8 +54793,14 @@ async function getIndexRef(registryName) { return (await getCmdOutput("git", ["rev-parse", "--short", "origin/master"], { cwd })).trim(); } async function getPackages() { + const cwd = process.cwd(); const meta = JSON.parse(await getCmdOutput("cargo", ["metadata", "--all-features", "--format-version", "1"])); - return meta.packages.map(({ name, version }) => ({ name, version })); + return meta.packages + .filter((p) => !p.manifest_path.startsWith(cwd)) + .map((p) => { + const targets = p.targets.filter((t) => t.kind[0] === "lib").map((t) => t.name); + return { name: p.name, version: p.version, targets }; + }); } async function pruneRegistryCache(registryName, packages) { var e_1, _a; @@ -54846,8 +54852,12 @@ async function pruneTarget(packages) { await rmExcept("./target/debug/build", keepPkg); await rmExcept("./target/debug/.fingerprint", keepPkg); const keepDeps = new Set(packages.flatMap((p) => { - const name = p.name.replace(/-/g, "_"); - return [name, `lib${name}`]; + const names = []; + for (const n of [p.name, ...p.targets]) { + const name = n.replace(/-/g, "_"); + names.push(name, `lib${name}`); + } + return names; })); await rmExcept("./target/debug/deps", keepDeps); } diff --git a/src/save.ts b/src/save.ts index 22034a1..06e5bde 100644 --- a/src/save.ts +++ b/src/save.ts @@ -68,13 +68,30 @@ async function getIndexRef(registryName: string) { interface PackageDefinition { name: string; version: string; + targets: Array; } type Packages = Array; +interface Meta { + packages: Array<{ + name: string; + version: string; + manifest_path: string; + targets: Array<{ kind: Array; name: string }>; + }>; +} + async function getPackages(): Promise { - const meta = JSON.parse(await getCmdOutput("cargo", ["metadata", "--all-features", "--format-version", "1"])); - return meta.packages.map(({ name, version }: any) => ({ name, version })); + const cwd = process.cwd(); + const meta: Meta = JSON.parse(await getCmdOutput("cargo", ["metadata", "--all-features", "--format-version", "1"])); + + return meta.packages + .filter((p) => !p.manifest_path.startsWith(cwd)) + .map((p) => { + const targets = p.targets.filter((t) => t.kind[0] === "lib").map((t) => t.name); + return { name: p.name, version: p.version, targets }; + }); } async function pruneRegistryCache(registryName: string, packages: Packages) { @@ -111,8 +128,12 @@ async function pruneTarget(packages: Packages) { const keepDeps = new Set( packages.flatMap((p) => { - const name = p.name.replace(/-/g, "_"); - return [name, `lib${name}`]; + const names = []; + for (const n of [p.name, ...p.targets]) { + const name = n.replace(/-/g, "_"); + names.push(name, `lib${name}`); + } + return names; }), ); await rmExcept("./target/debug/deps", keepDeps);