@procedures/snapshot 0.11.0 → 0.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAA+D,KAAK,eAAe,EAAuC,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAoJpL;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,eAMzB,CAAC;eAEU,cAAc;AAE7B;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,GAAE,iBAAsC,GAAG,IAAI,CAEjG"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAA+D,KAAK,eAAe,EAAuC,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAuJpL;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,eAMzB,CAAC;eAEU,cAAc;AAE7B;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,GAAE,iBAAsC,GAAG,IAAI,CAEjG"}
package/dist/module.js CHANGED
@@ -12,20 +12,24 @@ import { SnapshotCreateInputSchema, SnapshotListInputSchema, SnapshotRestoreInpu
12
12
  // Procedures
13
13
  // =============================================================================
14
14
  // =============================================================================
15
- // The rules under a root of the files (roadmap R33, tracker item O36)
15
+ // The rules under a root of the files (roadmap R33, tracker items O36 and O46)
16
16
  // =============================================================================
17
- /** `snapshot.create`: a root refuses it. */
18
- const CREATE_UNDER_A_ROOT = {
19
- refuse: "its default folder is the working folder of the process, tar reads each folder from its parent folder, and it starts git and pnpm itself, without the rules of the root",
20
- };
17
+ /**
18
+ * `snapshot.create`: each folder of `paths` is in the root, and the default folder is the root.
19
+ * Git goes through the `git.*` procedures, so their rules of the root apply. Pnpm does not start.
20
+ * Tar stores a symlink as a link, so the archive has only the files of the folders.
21
+ */
22
+ const CREATE_UNDER_A_ROOT = { paths: ["paths"] };
21
23
  /** `snapshot.restore`: a root refuses it. */
22
24
  const RESTORE_UNDER_A_ROOT = {
23
25
  refuse: "it downloads the archive into the temporary folder of the host through s3.download, and the names of the folders come from the data of the snapshot",
24
26
  };
25
- /** `snapshot.diff`: a root refuses it. */
26
- const DIFF_UNDER_A_ROOT = {
27
- refuse: "its default folders are the paths that the snapshot recorded on another machine, and it starts git itself, without the rules of the root",
28
- };
27
+ /**
28
+ * `snapshot.diff`: each folder of `paths` is in the root. Without `paths`, the folders are the
29
+ * paths that the snapshot recorded, maybe on another machine, so a root needs `paths`. Git goes
30
+ * through the `git.*` procedures, so their rules of the root apply.
31
+ */
32
+ const DIFF_UNDER_A_ROOT = { paths: ["paths"], required: ["paths"] };
29
33
  const snapshotCreateProcedure = createProcedure()
30
34
  .path(["snapshot", "create"])
31
35
  .input(zodAdapter(SnapshotCreateInputSchema))
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,23 @@
1
1
  /**
2
- * The programs that the snapshot procedures run: git and pnpm, through `runCommand`.
2
+ * The programs of the snapshot procedures: git through the `git.*` procedures, and pnpm.
3
3
  *
4
- * `runCommand` is async, kills the process tree when the signal aborts, and runs no shell.
5
- * Before, the procedures used `execSync`: it blocked the event loop of the host for each call,
6
- * ignored the signal, and passed the command line to a shell.
4
+ * - Git goes through the `git.*` procedures of the host (`ctx.client`), not through a process of
5
+ * this package. Under a root of the files, the rules of the root then apply to each git command:
6
+ * the working folder in the root, no hooks, no configuration that starts a program (tracker
7
+ * item O46).
8
+ * - `runCommand` starts pnpm. It is async, kills the process tree when the signal aborts, and runs
9
+ * no shell. Under a root, pnpm does not start.
7
10
  */
11
+ import type { ProcedureContext, ProcedurePath } from "@procedures/client";
8
12
  /**
9
- * This function runs `git <args>` in `cwd` and gives its trimmed output. It gives `undefined`
10
- * when git fails, when it cannot start, or when the signal aborts.
13
+ * This function starts a `git.*` procedure of the host and gives its output. It gives `undefined`
14
+ * when the procedure fails, for example in a folder that is not a repository. A refusal of the
15
+ * root (`FORBIDDEN` with the reason `outside-root`) is not a failure of git: it stays the error.
11
16
  */
12
- export declare function gitText(args: readonly string[], cwd: string, signal?: AbortSignal): Promise<string | undefined>;
13
- /** This function gives the version of pnpm, or "unknown" when pnpm cannot run. */
14
- export declare function pnpmVersion(signal?: AbortSignal): Promise<string>;
17
+ export declare function gitCall<T>(ctx: ProcedureContext, path: ProcedurePath, input: Record<string, unknown>): Promise<T | undefined>;
18
+ /**
19
+ * This function gives the version of pnpm, or "unknown" when pnpm cannot run. Under a root of the
20
+ * files (`fsRoot`), it starts no program and gives "unknown".
21
+ */
22
+ export declare function pnpmVersion(signal?: AbortSignal, fsRoot?: string): Promise<string>;
15
23
  //# sourceMappingURL=commands.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../src/procedures/snapshot/commands.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH;;;GAGG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAGrH;AAED,kFAAkF;AAClF,wBAAsB,WAAW,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CASvE"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../src/procedures/snapshot/commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAQ1E;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAOnI;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAUxF"}
@@ -1,24 +1,40 @@
1
1
  /**
2
- * The programs that the snapshot procedures run: git and pnpm, through `runCommand`.
2
+ * The programs of the snapshot procedures: git through the `git.*` procedures, and pnpm.
3
3
  *
4
- * `runCommand` is async, kills the process tree when the signal aborts, and runs no shell.
5
- * Before, the procedures used `execSync`: it blocked the event loop of the host for each call,
6
- * ignored the signal, and passed the command line to a shell.
4
+ * - Git goes through the `git.*` procedures of the host (`ctx.client`), not through a process of
5
+ * this package. Under a root of the files, the rules of the root then apply to each git command:
6
+ * the working folder in the root, no hooks, no configuration that starts a program (tracker
7
+ * item O46).
8
+ * - `runCommand` starts pnpm. It is async, kills the process tree when the signal aborts, and runs
9
+ * no shell. Under a root, pnpm does not start.
7
10
  */
11
+ import { isOutsideRoot } from "@procedures/fs/root";
8
12
  import { runCommand } from "@procedures/shell/command";
9
13
  import { resolvePnpm } from "@procedures/pnpm";
10
- /** The longest time of one git or pnpm query, in milliseconds. */
14
+ /** The longest time of one pnpm query, in milliseconds. */
11
15
  const QUERY_TIMEOUT_MS = 30_000;
12
16
  /**
13
- * This function runs `git <args>` in `cwd` and gives its trimmed output. It gives `undefined`
14
- * when git fails, when it cannot start, or when the signal aborts.
17
+ * This function starts a `git.*` procedure of the host and gives its output. It gives `undefined`
18
+ * when the procedure fails, for example in a folder that is not a repository. A refusal of the
19
+ * root (`FORBIDDEN` with the reason `outside-root`) is not a failure of git: it stays the error.
15
20
  */
16
- export async function gitText(args, cwd, signal) {
17
- const result = await runCommand("git", { args, cwd, signal, timeout: QUERY_TIMEOUT_MS });
18
- return result.success ? result.stdout.trim() : undefined;
21
+ export async function gitCall(ctx, path, input) {
22
+ try {
23
+ return await ctx.client.call(path, input);
24
+ }
25
+ catch (error) {
26
+ if (isOutsideRoot(error))
27
+ throw error;
28
+ return undefined;
29
+ }
19
30
  }
20
- /** This function gives the version of pnpm, or "unknown" when pnpm cannot run. */
21
- export async function pnpmVersion(signal) {
31
+ /**
32
+ * This function gives the version of pnpm, or "unknown" when pnpm cannot run. Under a root of the
33
+ * files (`fsRoot`), it starts no program and gives "unknown".
34
+ */
35
+ export async function pnpmVersion(signal, fsRoot) {
36
+ if (fsRoot !== undefined)
37
+ return "unknown";
22
38
  let pnpm;
23
39
  try {
24
40
  pnpm = resolvePnpm();
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/procedures/snapshot/commands.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,kEAAkE;AAClE,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAuB,EAAE,GAAW,EAAE,MAAoB;IACtF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACzF,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3D,CAAC;AAED,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAoB;IACpD,IAAI,IAA2C,CAAC;IAChD,IAAI,CAAC;QACH,IAAI,GAAG,WAAW,EAAE,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC1H,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/procedures/snapshot/commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,2DAA2D;AAC3D,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAI,GAAqB,EAAE,IAAmB,EAAE,KAA8B;IACzG,IAAI,CAAC;QACH,OAAO,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAA6B,IAAI,EAAE,KAAK,CAAC,CAAC;IACxE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,aAAa,CAAC,KAAK,CAAC;YAAE,MAAM,KAAK,CAAC;QACtC,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAoB,EAAE,MAAe;IACrE,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,IAAI,IAA2C,CAAC;IAChD,IAAI,CAAC;QACH,IAAI,GAAG,WAAW,EAAE,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC1H,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/procedures/snapshot/create.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAI3D,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EAIrB,MAAM,gBAAgB,CAAC;AAKxB;;GAEG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,mBAAmB,EAC1B,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,oBAAoB,CAAC,CAgG/B"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/procedures/snapshot/create.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAK3D,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EAIrB,MAAM,gBAAgB,CAAC;AAKxB;;GAEG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,mBAAmB,EAC1B,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,oBAAoB,CAAC,CAgG/B"}
@@ -9,9 +9,10 @@ import { join, basename, dirname, resolve } from "node:path";
9
9
  import { tmpdir, hostname } from "node:os";
10
10
  import { randomUUID } from "node:crypto";
11
11
  import * as tar from "tar";
12
+ import { isOutsideRoot, realPathIsInside, resolveRoot } from "@procedures/fs/root";
12
13
  import { assertSnapshotName, isExcluded } from "./names.js";
13
14
  import { readPart, sha256File } from "./archive-io.js";
14
- import { gitText, pnpmVersion } from "./commands.js";
15
+ import { gitCall, pnpmVersion } from "./commands.js";
15
16
  /** The size of each part of a multipart upload (the S3 minimum) */
16
17
  const PART_SIZE = 5 * 1024 * 1024;
17
18
  /**
@@ -29,7 +30,7 @@ export async function snapshotCreate(input, ctx) {
29
30
  // Gather repository info
30
31
  const repositories = await Promise.all(repoPaths.map((path) => getRepositoryInfo(path, ctx)));
31
32
  // Get environment info
32
- const environment = await getEnvironmentInfo(ctx.signal);
33
+ const environment = await getEnvironmentInfo(ctx.signal, ctx.fsRoot);
33
34
  // Create metadata
34
35
  const metadata = {
35
36
  id,
@@ -103,10 +104,10 @@ export async function snapshotCreate(input, ctx) {
103
104
  /**
104
105
  * Get ecosystem repository paths from manifest
105
106
  */
106
- async function getEcosystemPaths(_ctx) {
107
+ async function getEcosystemPaths(ctx) {
107
108
  // TODO: Read from ecosystem manifest
108
- // For now, return current working directory
109
- return [process.cwd()];
109
+ // For now, the root of the files under a root, else the current working directory
110
+ return [ctx.fsRoot ?? process.cwd()];
110
111
  }
111
112
  /**
112
113
  * Get repository info for a path
@@ -115,8 +116,8 @@ async function getRepositoryInfo(repoPath, ctx) {
115
116
  try {
116
117
  const result = await ctx.client.call(["git", "status"], { cwd: repoPath });
117
118
  // The commit hash ("" for a repository with no commit) and the remote URL (none without "origin")
118
- const commit = (await gitText(["rev-parse", "HEAD"], repoPath, ctx.signal)) ?? "";
119
- const remoteUrl = await gitText(["remote", "get-url", "origin"], repoPath, ctx.signal);
119
+ const commit = (await gitCall(ctx, ["git", "revParse"], { cwd: repoPath }))?.value ?? "";
120
+ const remoteUrl = (await gitCall(ctx, ["git", "remote"], { cwd: repoPath, name: "origin" }))?.url;
120
121
  // Get stash count
121
122
  let stashCount = 0;
122
123
  try {
@@ -126,11 +127,13 @@ async function getRepositoryInfo(repoPath, ctx) {
126
127
  catch {
127
128
  // No stashes
128
129
  }
129
- // Get package name from package.json
130
+ // Get package name from package.json. Under a root, a package.json whose real path is outside
131
+ // the root (a symlink) is not read.
130
132
  let name = basename(repoPath);
131
133
  try {
132
134
  const pkgPath = join(repoPath, "package.json");
133
- if (existsSync(pkgPath)) {
135
+ const readable = ctx.fsRoot === undefined || (await realPathIsInside(await resolveRoot(ctx.fsRoot), pkgPath));
136
+ if (readable && existsSync(pkgPath)) {
134
137
  const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
135
138
  name = pkg.name || name;
136
139
  }
@@ -151,6 +154,9 @@ async function getRepositoryInfo(repoPath, ctx) {
151
154
  };
152
155
  }
153
156
  catch (error) {
157
+ // A refusal of the root is not "no repository": the repository is there, and the root refuses it
158
+ if (isOutsideRoot(error))
159
+ throw error;
154
160
  // Not a git repo or error
155
161
  return {
156
162
  path: repoPath,
@@ -167,11 +173,11 @@ async function getRepositoryInfo(repoPath, ctx) {
167
173
  /**
168
174
  * Get environment info
169
175
  */
170
- async function getEnvironmentInfo(signal) {
176
+ async function getEnvironmentInfo(signal, fsRoot) {
171
177
  return {
172
178
  os: process.platform,
173
179
  nodeVersion: process.version,
174
- pnpmVersion: await pnpmVersion(signal),
180
+ pnpmVersion: await pnpmVersion(signal, fsRoot),
175
181
  username: process.env["USER"] || process.env["USERNAME"] || "unknown",
176
182
  hostname: hostname(),
177
183
  };
@@ -206,10 +212,13 @@ async function createArchive(archivePath, repoPaths, preset, workDir) {
206
212
  excludePatterns.push(".pnpm-store", "*.log");
207
213
  }
208
214
  // heavy preset includes everything
215
+ // Tar reads only the listed folders from their parent. Without `follow`, it stores a symlink as
216
+ // a link and does not read its target: under a root, the archive has only files of the root.
209
217
  await tar.create({
210
218
  gzip: gzipOpts,
211
219
  file: archivePath,
212
220
  cwd,
221
+ follow: false,
213
222
  // Whole path segments, and "*.ext" for file endings. (Before, `path.includes("dist")`
214
223
  // left out src/distance.ts, and "*.log" matched nothing: deep dive DATA-3.)
215
224
  filter: (path) => !isExcluded(path, excludePatterns),
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/procedures/snapshot/create.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/procedures/snapshot/create.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../src/procedures/snapshot/diff.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAGnB,MAAM,gBAAgB,CAAC;AAGxB;;GAEG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,iBAAiB,EACxB,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,kBAAkB,CAAC,CA0H7B"}
1
+ {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../src/procedures/snapshot/diff.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG3D,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAGnB,MAAM,gBAAgB,CAAC;AAGxB;;GAEG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,iBAAiB,EACxB,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,kBAAkB,CAAC,CA6H7B"}
@@ -5,7 +5,8 @@
5
5
  */
6
6
  import { existsSync } from "node:fs";
7
7
  import { basename } from "node:path";
8
- import { gitText } from "./commands.js";
8
+ import { isOutsideRoot } from "@procedures/fs/root";
9
+ import { gitCall } from "./commands.js";
9
10
  import { listAllObjects, findSnapshotKey } from "./s3-lookup.js";
10
11
  /**
11
12
  * Compare current state against a snapshot
@@ -46,7 +47,7 @@ export async function snapshotDiff(input, ctx) {
46
47
  }
47
48
  try {
48
49
  // Get current branch (a failure is an error of this repository: the catch below)
49
- const currentBranch = await gitText(["rev-parse", "--abbrev-ref", "HEAD"], repoPath, ctx.signal);
50
+ const currentBranch = (await gitCall(ctx, ["git", "revParse"], { cwd: repoPath, abbrevRef: true }))?.value;
50
51
  if (currentBranch === undefined)
51
52
  throw new Error(`git cannot read the branch of ${repoPath}`);
52
53
  if (currentBranch !== snapshotRepo.branch) {
@@ -56,7 +57,7 @@ export async function snapshotDiff(input, ctx) {
56
57
  };
57
58
  }
58
59
  // Get current commit
59
- const currentCommit = await gitText(["rev-parse", "HEAD"], repoPath, ctx.signal);
60
+ const currentCommit = (await gitCall(ctx, ["git", "revParse"], { cwd: repoPath }))?.value;
60
61
  if (currentCommit === undefined)
61
62
  throw new Error(`git cannot read the commit of ${repoPath}`);
62
63
  if (currentCommit !== snapshotRepo.commit) {
@@ -71,14 +72,16 @@ export async function snapshotDiff(input, ctx) {
71
72
  if (!/^[0-9a-f]{7,64}$/i.test(snapshotRepo.commit)) {
72
73
  throw new Error(`Not a commit hash: ${snapshotRepo.commit}`);
73
74
  }
74
- const diffStat = await gitText(["diff", "--stat", `${snapshotRepo.commit}..HEAD`], repoPath, ctx.signal);
75
- if (diffStat === undefined)
75
+ const changes = await gitCall(ctx, ["git", "diff"], { cwd: repoPath, ref: `${snapshotRepo.commit}..HEAD`, stat: true });
76
+ if (changes === undefined)
76
77
  throw new Error(`git cannot compare ${snapshotRepo.commit} with HEAD`);
77
- // Count lines that represent files (contain |)
78
- diff.filesChanged = diffStat.split("\n").filter((l) => l.includes("|")).length;
78
+ // One entry for each file that changed, also a binary file
79
+ diff.filesChanged = changes.files.length;
79
80
  totalFilesChanged += diff.filesChanged;
80
81
  }
81
- catch {
82
+ catch (error) {
83
+ if (isOutsideRoot(error))
84
+ throw error;
82
85
  // Snapshot commit may not exist locally
83
86
  diff.filesChanged = -1;
84
87
  }
@@ -93,7 +96,10 @@ export async function snapshotDiff(input, ctx) {
93
96
  reposChanged++;
94
97
  }
95
98
  }
96
- catch {
99
+ catch (error) {
100
+ // A refusal of the root is not "no repository": the repository is there, and the root refuses it
101
+ if (isOutsideRoot(error))
102
+ throw error;
97
103
  // Not a git repo or error
98
104
  diff.filesChanged = -1;
99
105
  reposChanged++;
@@ -1 +1 @@
1
- {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/procedures/snapshot/diff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/procedures/snapshot/diff.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package",
3
3
  "name": "@procedures/snapshot",
4
- "version": "0.11.0",
4
+ "version": "0.12.1",
5
5
  "description": "Snapshot and restore development environments with S3: git state, packages and files, with streamed archives and a safe restore.",
6
6
  "keywords": [
7
7
  "snapshot",
@@ -61,12 +61,12 @@
61
61
  "provenance": true
62
62
  },
63
63
  "dependencies": {
64
- "@procedures/client": "0.11.0",
65
- "@procedures/fs": "0.11.0",
66
- "@procedures/git": "0.11.0",
67
- "@procedures/pnpm": "0.11.0",
68
- "@procedures/s3": "0.11.0",
69
- "@procedures/shell": "0.11.0",
64
+ "@procedures/client": "0.12.1",
65
+ "@procedures/fs": "0.12.1",
66
+ "@procedures/git": "0.12.1",
67
+ "@procedures/pnpm": "0.12.1",
68
+ "@procedures/s3": "0.12.1",
69
+ "@procedures/shell": "0.12.1",
70
70
  "tar": "^7.5.0",
71
71
  "zod": "^4.6.5"
72
72
  },
package/src/module.ts CHANGED
@@ -43,24 +43,27 @@ import {
43
43
  // =============================================================================
44
44
 
45
45
  // =============================================================================
46
- // The rules under a root of the files (roadmap R33, tracker item O36)
46
+ // The rules under a root of the files (roadmap R33, tracker items O36 and O46)
47
47
  // =============================================================================
48
48
 
49
- /** `snapshot.create`: a root refuses it. */
50
- const CREATE_UNDER_A_ROOT: FsRootRules = {
51
- refuse:
52
- "its default folder is the working folder of the process, tar reads each folder from its parent folder, and it starts git and pnpm itself, without the rules of the root",
53
- };
49
+ /**
50
+ * `snapshot.create`: each folder of `paths` is in the root, and the default folder is the root.
51
+ * Git goes through the `git.*` procedures, so their rules of the root apply. Pnpm does not start.
52
+ * Tar stores a symlink as a link, so the archive has only the files of the folders.
53
+ */
54
+ const CREATE_UNDER_A_ROOT: FsRootRules = { paths: ["paths"] };
54
55
 
55
56
  /** `snapshot.restore`: a root refuses it. */
56
57
  const RESTORE_UNDER_A_ROOT: FsRootRules = {
57
58
  refuse: "it downloads the archive into the temporary folder of the host through s3.download, and the names of the folders come from the data of the snapshot",
58
59
  };
59
60
 
60
- /** `snapshot.diff`: a root refuses it. */
61
- const DIFF_UNDER_A_ROOT: FsRootRules = {
62
- refuse: "its default folders are the paths that the snapshot recorded on another machine, and it starts git itself, without the rules of the root",
63
- };
61
+ /**
62
+ * `snapshot.diff`: each folder of `paths` is in the root. Without `paths`, the folders are the
63
+ * paths that the snapshot recorded, maybe on another machine, so a root needs `paths`. Git goes
64
+ * through the `git.*` procedures, so their rules of the root apply.
65
+ */
66
+ const DIFF_UNDER_A_ROOT: FsRootRules = { paths: ["paths"], required: ["paths"] };
64
67
 
65
68
  const snapshotCreateProcedure = createProcedure()
66
69
  .path(["snapshot", "create"])
@@ -1,28 +1,42 @@
1
1
  /**
2
- * The programs that the snapshot procedures run: git and pnpm, through `runCommand`.
2
+ * The programs of the snapshot procedures: git through the `git.*` procedures, and pnpm.
3
3
  *
4
- * `runCommand` is async, kills the process tree when the signal aborts, and runs no shell.
5
- * Before, the procedures used `execSync`: it blocked the event loop of the host for each call,
6
- * ignored the signal, and passed the command line to a shell.
4
+ * - Git goes through the `git.*` procedures of the host (`ctx.client`), not through a process of
5
+ * this package. Under a root of the files, the rules of the root then apply to each git command:
6
+ * the working folder in the root, no hooks, no configuration that starts a program (tracker
7
+ * item O46).
8
+ * - `runCommand` starts pnpm. It is async, kills the process tree when the signal aborts, and runs
9
+ * no shell. Under a root, pnpm does not start.
7
10
  */
8
11
 
12
+ import type { ProcedureContext, ProcedurePath } from "@procedures/client";
13
+ import { isOutsideRoot } from "@procedures/fs/root";
9
14
  import { runCommand } from "@procedures/shell/command";
10
15
  import { resolvePnpm } from "@procedures/pnpm";
11
16
 
12
- /** The longest time of one git or pnpm query, in milliseconds. */
17
+ /** The longest time of one pnpm query, in milliseconds. */
13
18
  const QUERY_TIMEOUT_MS = 30_000;
14
19
 
15
20
  /**
16
- * This function runs `git <args>` in `cwd` and gives its trimmed output. It gives `undefined`
17
- * when git fails, when it cannot start, or when the signal aborts.
21
+ * This function starts a `git.*` procedure of the host and gives its output. It gives `undefined`
22
+ * when the procedure fails, for example in a folder that is not a repository. A refusal of the
23
+ * root (`FORBIDDEN` with the reason `outside-root`) is not a failure of git: it stays the error.
18
24
  */
19
- export async function gitText(args: readonly string[], cwd: string, signal?: AbortSignal): Promise<string | undefined> {
20
- const result = await runCommand("git", { args, cwd, signal, timeout: QUERY_TIMEOUT_MS });
21
- return result.success ? result.stdout.trim() : undefined;
25
+ export async function gitCall<T>(ctx: ProcedureContext, path: ProcedurePath, input: Record<string, unknown>): Promise<T | undefined> {
26
+ try {
27
+ return await ctx.client.call<Record<string, unknown>, T>(path, input);
28
+ } catch (error) {
29
+ if (isOutsideRoot(error)) throw error;
30
+ return undefined;
31
+ }
22
32
  }
23
33
 
24
- /** This function gives the version of pnpm, or "unknown" when pnpm cannot run. */
25
- export async function pnpmVersion(signal?: AbortSignal): Promise<string> {
34
+ /**
35
+ * This function gives the version of pnpm, or "unknown" when pnpm cannot run. Under a root of the
36
+ * files (`fsRoot`), it starts no program and gives "unknown".
37
+ */
38
+ export async function pnpmVersion(signal?: AbortSignal, fsRoot?: string): Promise<string> {
39
+ if (fsRoot !== undefined) return "unknown";
26
40
  let pnpm: { command: string; prefix: string[] };
27
41
  try {
28
42
  pnpm = resolvePnpm();