improve registry cleanpu

This commit is contained in:
Arpad Borsos 2022-07-09 19:20:02 +02:00
parent 7b8626742a
commit 0497f9301f
No known key found for this signature in database
GPG Key ID: FC7BCA77824B3298
5 changed files with 22 additions and 11 deletions

View File

@ -2,5 +2,3 @@
- better .cargo/bin handling:
- get a list of all the files on "pre"/"restore"
- move the files out of the way on "post"/"save" and move them back afterwards
- better .cargo/registry handling:
- rather implement better cleaning logic for the registry

10
dist/restore/index.js vendored
View File

@ -61910,6 +61910,7 @@ async function cleanBin() {
}
async function cleanRegistry(packages) {
// `.cargo/registry/src`
// we can remove this completely, as cargo will recreate this from `cache`
const srcDir = path.join(CARGO_HOME, "registry", "src");
await io.rmRF(srcDir);
// `.cargo/registry/index`
@ -61919,9 +61920,11 @@ async function cleanRegistry(packages) {
// eg `.cargo/registry/index/github.com-1ecc6299db9ec823`
// or `.cargo/registry/index/index.crates.io-e139d0d48fed7772`
const dir = await fs.promises.opendir(path.join(indexDir.path, dirent.name));
// TODO: check for `.git` etc, for now we just always remove the `.cache`
// and leave other stuff untouched.
await io.rmRF(path.join(dir.path, ".cache"));
// for a git registry, we can remove `.cache`, as cargo will recreate it from git
if (await exists(path.join(dir.path, ".git"))) {
await io.rmRF(path.join(dir.path, ".cache"));
}
// TODO: else, clean `.cache` based on the `packages`
}
}
const pkgSet = new Set(packages.map((p) => `${p.name}-${p.version}.crate`));
@ -61933,6 +61936,7 @@ async function cleanRegistry(packages) {
// or `.cargo/registry/cache/index.crates.io-e139d0d48fed7772`
const dir = await fs.promises.opendir(path.join(cacheDir.path, dirent.name));
for await (const dirent of dir) {
// here we check that the downloaded `.crate` matches one from our dependencies
if (dirent.isFile() && !pkgSet.has(dirent.name)) {
await rm(dir.path, dirent);
}

10
dist/save/index.js vendored
View File

@ -61910,6 +61910,7 @@ async function cleanBin() {
}
async function cleanRegistry(packages) {
// `.cargo/registry/src`
// we can remove this completely, as cargo will recreate this from `cache`
const srcDir = external_path_default().join(CARGO_HOME, "registry", "src");
await io.rmRF(srcDir);
// `.cargo/registry/index`
@ -61919,9 +61920,11 @@ async function cleanRegistry(packages) {
// eg `.cargo/registry/index/github.com-1ecc6299db9ec823`
// or `.cargo/registry/index/index.crates.io-e139d0d48fed7772`
const dir = await external_fs_default().promises.opendir(external_path_default().join(indexDir.path, dirent.name));
// TODO: check for `.git` etc, for now we just always remove the `.cache`
// and leave other stuff untouched.
await io.rmRF(external_path_default().join(dir.path, ".cache"));
// for a git registry, we can remove `.cache`, as cargo will recreate it from git
if (await exists(external_path_default().join(dir.path, ".git"))) {
await io.rmRF(external_path_default().join(dir.path, ".cache"));
}
// TODO: else, clean `.cache` based on the `packages`
}
}
const pkgSet = new Set(packages.map((p) => `${p.name}-${p.version}.crate`));
@ -61933,6 +61936,7 @@ async function cleanRegistry(packages) {
// or `.cargo/registry/cache/index.crates.io-e139d0d48fed7772`
const dir = await external_fs_default().promises.opendir(external_path_default().join(cacheDir.path, dirent.name));
for await (const dirent of dir) {
// here we check that the downloaded `.crate` matches one from our dependencies
if (dirent.isFile() && !pkgSet.has(dirent.name)) {
await rm(dir.path, dirent);
}

View File

@ -93,6 +93,7 @@ export async function cleanBin() {
export async function cleanRegistry(packages: Packages) {
// `.cargo/registry/src`
// we can remove this completely, as cargo will recreate this from `cache`
const srcDir = path.join(CARGO_HOME, "registry", "src");
await io.rmRF(srcDir);
@ -104,9 +105,11 @@ export async function cleanRegistry(packages: Packages) {
// or `.cargo/registry/index/index.crates.io-e139d0d48fed7772`
const dir = await fs.promises.opendir(path.join(indexDir.path, dirent.name));
// TODO: check for `.git` etc, for now we just always remove the `.cache`
// and leave other stuff untouched.
await io.rmRF(path.join(dir.path, ".cache"));
// for a git registry, we can remove `.cache`, as cargo will recreate it from git
if (await exists(path.join(dir.path, ".git"))) {
await io.rmRF(path.join(dir.path, ".cache"));
}
// TODO: else, clean `.cache` based on the `packages`
}
}
@ -120,6 +123,7 @@ export async function cleanRegistry(packages: Packages) {
// or `.cargo/registry/cache/index.crates.io-e139d0d48fed7772`
const dir = await fs.promises.opendir(path.join(cacheDir.path, dirent.name));
for await (const dirent of dir) {
// here we check that the downloaded `.crate` matches one from our dependencies
if (dirent.isFile() && !pkgSet.has(dirent.name)) {
await rm(dir.path, dirent);
}

View File

@ -2,6 +2,7 @@ fn main() {
println!("Hello, world!");
}
#[cfg(test)]
fn some_fn(input: bool) -> usize {
if input {
2 + 4