mirror of
https://github.com/Swatinem/rust-cache
synced 2026-01-15 16:16:18 +00:00
Remove a few synchronous FS interactions
This commit is contained in:
parent
42c55942cf
commit
230365fb7a
3 changed files with 41 additions and 19 deletions
|
|
@ -1,8 +1,9 @@
|
|||
import * as core from "@actions/core";
|
||||
import * as glob from "@actions/glob";
|
||||
import crypto from "crypto";
|
||||
import fs from "fs";
|
||||
import fs_promises from "fs/promises";
|
||||
import fs from "fs/promises";
|
||||
import { createReadStream } from "fs";
|
||||
import { pipeline } from "stream/promises";
|
||||
import os from "os";
|
||||
import path from "path";
|
||||
import * as toml from "smol-toml";
|
||||
|
|
@ -178,7 +179,7 @@ export class CacheConfig {
|
|||
|
||||
for (const cargo_manifest of cargo_manifests) {
|
||||
try {
|
||||
const content = await fs_promises.readFile(cargo_manifest, { encoding: "utf8" });
|
||||
const content = await fs.readFile(cargo_manifest, { encoding: "utf8" });
|
||||
// Use any since TomlPrimitive is not exposed
|
||||
const parsed = toml.parse(content) as { [key: string]: any };
|
||||
|
||||
|
|
@ -225,7 +226,7 @@ export class CacheConfig {
|
|||
const cargo_lock = path.join(workspace.root, "Cargo.lock");
|
||||
if (await exists(cargo_lock)) {
|
||||
try {
|
||||
const content = await fs_promises.readFile(cargo_lock, { encoding: "utf8" });
|
||||
const content = await fs.readFile(cargo_lock, { encoding: "utf8" });
|
||||
const parsed = toml.parse(content);
|
||||
|
||||
if ((parsed.version !== 3 && parsed.version !== 4) || !("package" in parsed)) {
|
||||
|
|
@ -253,9 +254,7 @@ export class CacheConfig {
|
|||
keyFiles = sort_and_uniq(keyFiles);
|
||||
|
||||
for (const file of keyFiles) {
|
||||
for await (const chunk of fs.createReadStream(file)) {
|
||||
hasher.update(chunk);
|
||||
}
|
||||
await pipeline(createReadStream(file), hasher);
|
||||
}
|
||||
|
||||
keyFiles.push(...parsedKeyFiles);
|
||||
|
|
@ -394,10 +393,17 @@ async function globFiles(pattern: string): Promise<string[]> {
|
|||
const globber = await glob.create(pattern, {
|
||||
followSymbolicLinks: false,
|
||||
});
|
||||
// fs.statSync resolve the symbolic link and returns stat for the
|
||||
// fs.stat resolve the symbolic link and returns stat for the
|
||||
// file it pointed to, so isFile would make sure the resolved
|
||||
// file is actually a regular file.
|
||||
return (await globber.glob()).filter((file) => fs.statSync(file).isFile());
|
||||
const files = [];
|
||||
for (const file of await globber.glob()) {
|
||||
const stats = await fs.stat(file);
|
||||
if (stats.isFile()) {
|
||||
files.push(file);
|
||||
}
|
||||
}
|
||||
return files;
|
||||
}
|
||||
|
||||
function sort_and_uniq(a: string[]) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue