craftar 0.32.0 → 0.33.0

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,7 +1,7 @@
1
1
  import { promises as fs } from "node:fs";
2
2
  import path from "node:path";
3
- import { credentialKeys, hideKeys, namedCacheKeys, readRegistry } from "./registry.js";
4
- import { cacheDir, cacheKey, classifyForge, inspectCache, pruneTrees, removeEntry, removeLeftover, withPruneLock, } from "./remote.js";
3
+ import { credentialKeys, hideCacheKeys, hideCacheSegment, hideKeys, namedCacheKeys, readRegistry, vouchedKeys } from "./registry.js";
4
+ import { cacheDir, cacheKey, classifyForge, inspectCache, pruneTrees, removeEntry, removeLeftover, REMOVING_PREFIX, withPruneLock, } from "./remote.js";
5
5
  import { readWorkspaceConfig } from "./sync.js";
6
6
  /** Build the "whole entries kept" warning from a reason (used by two code paths). */
7
7
  const wholeEntriesWarning = (reason) => `whole entries kept: ${reason} — nothing can tell which ones are used`;
@@ -20,9 +20,17 @@ export async function pruneCache(home, opts) {
20
20
  // The keys the registry records for a URL with credentials: an entry's name is its key, and such a
21
21
  // key holds them in clear. Filled once the registry is read; nothing this run says names one.
22
22
  const hide = [];
23
+ // The unvouched keys: filled after the snapshot is built. A failure before the snapshot
24
+ // uses `hideCacheSegment`; a failure after it uses `hideCacheKeys(text, hide, unvouched)` (spec 39 §5.1).
25
+ let snapshotBuilt = false;
26
+ const unvouched = [];
23
27
  // The actual prune work: under the prune lock for a run, no lock for dry-run.
24
28
  // Everything after the "no forges/" check runs under the prune lock (§4.2 step 0).
25
29
  const doPrune = async (lock) => {
30
+ // Reset the state in case of retry (spec 39 §5.1: an entry unvouched at the snapshot stays labelled for the whole run).
31
+ snapshotBuilt = false;
32
+ hide.length = 0;
33
+ unvouched.length = 0;
26
34
  const start = Date.now();
27
35
  // Step 2: Determine naming info (§4.2 step 2) — under the lock so a waiting prune sees the state
28
36
  // after the one that held the lock finishes.
@@ -59,8 +67,9 @@ export async function pruneCache(home, opts) {
59
67
  hide.push(...credentialKeys(reg));
60
68
  // Step 3: Snapshot the cache — under the lock.
61
69
  let snapshot;
70
+ const doInspect = opts.inspectCache ?? inspectCache;
62
71
  try {
63
- snapshot = await inspectCache(home);
72
+ snapshot = await doInspect(home);
64
73
  }
65
74
  catch (e) {
66
75
  throw new Error(`cannot read ${forgesDir}: ${e.message}`);
@@ -69,6 +78,27 @@ export async function pruneCache(home, opts) {
69
78
  // the lock is in forges/ during the snapshot but is not part of the cache content.
70
79
  const headerBytes = snapshot.bytes - lock.bytes;
71
80
  const header = { forges: forgesDir, entries: snapshot.entries.length, bytes: headerBytes };
81
+ // The unvouched list: every key in the snapshot that is not vouched (spec 39 §5.1).
82
+ // Built now, so `guarded` knows whether the failure came before or after the snapshot.
83
+ const vouched = vouchedKeys(named, reg);
84
+ unvouched.length = 0; // Clear in case of retry
85
+ for (const e of snapshot.entries)
86
+ if (!vouched.has(e.key))
87
+ unvouched.push(e.key);
88
+ // Keys inside ~removing- directories: strip the prefix and the trailing `-<digits>`.
89
+ for (const r of snapshot.removing) {
90
+ const name = path.basename(r.dir);
91
+ if (name.startsWith(REMOVING_PREFIX)) {
92
+ const rest = name.slice(REMOVING_PREFIX.length);
93
+ const lastDash = rest.lastIndexOf("-");
94
+ if (lastDash !== -1) {
95
+ const maybeKey = rest.slice(0, lastDash);
96
+ if (!vouched.has(maybeKey) && !hide.includes(maybeKey))
97
+ unvouched.push(maybeKey);
98
+ }
99
+ }
100
+ }
101
+ snapshotBuilt = true; // Mark that the snapshot was built for guarded's hide logic.
72
102
  const removed = [];
73
103
  const kept = [];
74
104
  const warnings = [];
@@ -216,9 +246,13 @@ export async function pruneCache(home, opts) {
216
246
  }
217
247
  const freedBytes = removed.reduce((sum, r) => sum + r.bytes, 0);
218
248
  // The report names such an entry by the fixed label, in every path and warning.
219
- const shown = (rows) => (hide.length === 0 ? rows : rows.map((r) => ({ ...r, path: hideKeys(r.path, hide) })));
249
+ // hideCacheKeys labels both credential and unvouched keys by merged ranges of the original text (spec 39 review rounds 2-3).
250
+ // An entry unvouched at the snapshot stays labelled for the whole run (fail closed).
251
+ const hidePath = (text) => hideCacheKeys(text, hide, unvouched);
252
+ const shownRemoved = removed.map((r) => ({ ...r, path: hidePath(r.path) }));
253
+ const shownKept = kept.map((r) => ({ ...r, path: hidePath(r.path) }));
220
254
  return {
221
- report: { home, dryRun: opts.dryRun, removed: shown(removed), kept: shown(kept), freedBytes, warnings: warnings.map((w) => hideKeys(w, hide)) },
255
+ report: { home, dryRun: opts.dryRun, removed: shownRemoved, kept: shownKept, freedBytes, warnings: warnings.map(hidePath) },
222
256
  header,
223
257
  };
224
258
  };
@@ -229,10 +263,26 @@ export async function pruneCache(home, opts) {
229
263
  return await doPrune(lock);
230
264
  }
231
265
  catch (e) {
232
- if (!(e instanceof Error) || hideKeys(e.message, hide) === e.message)
266
+ if (!(e instanceof Error))
267
+ throw e;
268
+ // Before the snapshot: use hideCacheSegment then hideKeys (spec 39 §5.1).
269
+ // Two passes are safe: hideCacheSegment replaces the whole segment after `forges/`, and a
270
+ // credential key is a cacheKey — only [a-z0-9._-], ending in `-<12 hex>` — while the inserted
271
+ // label holds no such run and starts with `(` and holds spaces, so hideKeys can match neither
272
+ // inside nor across it.
273
+ // After the snapshot: use hideCacheKeys, one call over the original text (spec 39 review rounds 2-3).
274
+ let msg = e.message;
275
+ if (!snapshotBuilt) {
276
+ msg = hideCacheSegment(msg, home);
277
+ msg = hideKeys(msg, hide);
278
+ }
279
+ else {
280
+ msg = hideCacheKeys(msg, hide, unvouched);
281
+ }
282
+ if (msg === e.message)
233
283
  throw e;
234
284
  // A new error on purpose — no `cause`, no copied `code`: the original carries the name.
235
- throw new Error(hideKeys(e.message, hide));
285
+ throw new Error(msg);
236
286
  }
237
287
  };
238
288
  // Under prune lock for a run, no lock for dry-run.
@@ -1 +1 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/core/cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/core/cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,416 @@
1
+ /**
2
+ * Repository cloning for `craftar init --clone` and `craftar repos clone` (spec 37 §5.1, §5.2).
3
+ * The destination checks (C5) are stricter than the rest of craftar on purpose: real-path
4
+ * containment (§7), so neither a `..` segment nor a symlink can carry a clone outside the workspace
5
+ * or into the Forge. The check-then-act gap is known (§7): a destination can appear between the
6
+ * plan and the clone; `cloneRepos` re-checks before each runner call, and a failure there is
7
+ * reported as one entry's failure.
8
+ *
9
+ * PURE: no console; `process` read only for `process.platform`.
10
+ */
11
+ import { promises as fs } from "node:fs";
12
+ import path from "node:path";
13
+ import { realpathOfNearest } from "./forge.js";
14
+ import { nameShaped } from "./integrations.js";
15
+ import { onPath, spawnInherited } from "./proc.js";
16
+ import { cloneArgs, isRepoName, profileRepos } from "./repos.js";
17
+ /* ------------------------------------------------------------------ */
18
+ /* Helpers */
19
+ /* ------------------------------------------------------------------ */
20
+ const WIN = process.platform === "win32";
21
+ /**
22
+ * The repository-local environment variables git itself clears when it moves to another repository.
23
+ * This is what `git rev-parse --local-env-vars` lists (git 2.53).
24
+ */
25
+ const GIT_LOCAL_ENV = [
26
+ "GIT_ALTERNATE_OBJECT_DIRECTORIES",
27
+ "GIT_CONFIG",
28
+ "GIT_CONFIG_PARAMETERS",
29
+ "GIT_CONFIG_COUNT",
30
+ "GIT_OBJECT_DIRECTORY",
31
+ "GIT_DIR",
32
+ "GIT_WORK_TREE",
33
+ "GIT_IMPLICIT_WORK_TREE",
34
+ "GIT_GRAFT_FILE",
35
+ "GIT_INDEX_FILE",
36
+ "GIT_NO_REPLACE_OBJECTS",
37
+ "GIT_REPLACE_REF_BASE",
38
+ "GIT_PREFIX",
39
+ "GIT_SHALLOW_FILE",
40
+ "GIT_COMMON_DIR",
41
+ ];
42
+ /** Set for O(1) lookup, upper-case for win32. */
43
+ const GIT_LOCAL_SET = new Set(GIT_LOCAL_ENV.map((v) => v.toUpperCase()));
44
+ /** Whether a key is one of git's repository-local variables — case-insensitive on win32, exact elsewhere. */
45
+ function isLocalEnvVar(k) {
46
+ return WIN ? GIT_LOCAL_SET.has(k.toUpperCase()) : GIT_LOCAL_SET.has(k);
47
+ }
48
+ /** Case-insensitive comparison on Windows, case-sensitive elsewhere. */
49
+ function eq(a, b) {
50
+ return WIN ? a.toLowerCase() === b.toLowerCase() : a === b;
51
+ }
52
+ /**
53
+ * Whether `a` is equal to `b` or strictly inside `b`, by `path.relative`. The comparison is
54
+ * case-insensitive on win32.
55
+ */
56
+ function isInsideOrEqual(a, b) {
57
+ const rel = path.relative(b, a);
58
+ if (rel === "")
59
+ return true; // equal
60
+ if (path.isAbsolute(rel))
61
+ return false;
62
+ // A relative path starting with ".." (but not "..something") is outside
63
+ if (rel === ".." || rel.startsWith(".." + path.sep))
64
+ return false;
65
+ // On win32, compare without case
66
+ if (WIN) {
67
+ const relLower = path.relative(b.toLowerCase(), a.toLowerCase());
68
+ if (relLower === ".." || relLower.startsWith(".." + path.sep) || path.isAbsolute(relLower))
69
+ return false;
70
+ }
71
+ return true;
72
+ }
73
+ /**
74
+ * Whether `a` is strictly inside `b` (equal returns false).
75
+ */
76
+ function isStrictlyInside(a, b) {
77
+ const rel = path.relative(b, a);
78
+ if (rel === "")
79
+ return false; // equal, not strictly inside
80
+ if (path.isAbsolute(rel))
81
+ return false;
82
+ if (rel === ".." || rel.startsWith(".." + path.sep))
83
+ return false;
84
+ if (WIN) {
85
+ const relLower = path.relative(b.toLowerCase(), a.toLowerCase());
86
+ if (relLower === "" || relLower === ".." || relLower.startsWith(".." + path.sep) || path.isAbsolute(relLower))
87
+ return false;
88
+ }
89
+ return true;
90
+ }
91
+ /** Whether `lstat` can see anything at `p` (a file, directory, or dangling link). */
92
+ async function exists(p) {
93
+ try {
94
+ await fs.lstat(p);
95
+ return true;
96
+ }
97
+ catch {
98
+ return false;
99
+ }
100
+ }
101
+ /**
102
+ * Walk up from `from` toward `stop`, following links via `fs.stat`. Returns the first existing
103
+ * path (a directory check), or null if nothing exists. Never goes above `stop`.
104
+ */
105
+ async function firstExistingAncestor(from, stop) {
106
+ let current = from;
107
+ while (current !== stop && !eq(current, stop)) {
108
+ const parent = path.dirname(current);
109
+ if (parent === current)
110
+ break; // reached root
111
+ try {
112
+ const stat = await fs.stat(parent);
113
+ return { path: parent, isDir: stat.isDirectory() };
114
+ }
115
+ catch (e) {
116
+ const code = e.code;
117
+ if (code === "ENOENT" || code === "ENOTDIR") {
118
+ current = parent;
119
+ continue;
120
+ }
121
+ // Other errors (permission, etc.): stop walking
122
+ break;
123
+ }
124
+ }
125
+ return null;
126
+ }
127
+ /* ------------------------------------------------------------------ */
128
+ /* destinationFault — C5 in each of its forms */
129
+ /* ------------------------------------------------------------------ */
130
+ /**
131
+ * The reason this destination cannot be used, or null. Checks in §5.1's order (first hit wins):
132
+ * 1. already exists (lstat succeeds)
133
+ * 2. a file sync writes (planned or lockPaths, with prefix matching)
134
+ * 3. resolution error (realpathOfNearest throws)
135
+ * 4. inside the Forge
136
+ * 5. leaves the workspace through a link
137
+ * 6. a parent is not a directory
138
+ *
139
+ * `root` and `ctx.forgeDir` are absolute; `e.path` is POSIX relative.
140
+ */
141
+ export async function destinationFault(root, e, ctx) {
142
+ const abs = path.join(root, ...e.path.split("/"));
143
+ const pPath = e.path; // the profile's spelling, POSIX
144
+ // 1. lstat succeeds → already exists
145
+ try {
146
+ await fs.lstat(abs);
147
+ return `${pPath} already exists in the workspace — move it, or leave the clone out`;
148
+ }
149
+ catch (lstatErr) {
150
+ const code = lstatErr.code;
151
+ if (code !== "ENOENT" && code !== "ENOTDIR") {
152
+ // Some other lstat error (EACCES, EIO, …) falls through on purpose: step 3's
153
+ // realpathOfNearest fails closed, refusing the destination rather than missing it.
154
+ }
155
+ }
156
+ // 2. A file sync writes — check planned and lockPaths
157
+ const pLower = pPath.toLowerCase();
158
+ for (const planned of ctx.planned) {
159
+ const plannedLower = planned.toLowerCase();
160
+ // Equal or e.path is a prefix of planned followed by /
161
+ if (pLower === plannedLower || plannedLower.startsWith(pLower + "/")) {
162
+ return `${pPath} is a file sync writes`;
163
+ }
164
+ }
165
+ for (const lock of ctx.lockPaths) {
166
+ const lockLower = lock.toLowerCase();
167
+ if (pLower === lockLower || lockLower.startsWith(pLower + "/")) {
168
+ return `${pPath} is a file sync writes`;
169
+ }
170
+ }
171
+ // 3. Resolve paths — any error → return the error message
172
+ let destReal;
173
+ let rootReal;
174
+ let forgeReal;
175
+ try {
176
+ destReal = await realpathOfNearest(abs);
177
+ }
178
+ catch (err) {
179
+ return err instanceof Error ? err.message : String(err);
180
+ }
181
+ try {
182
+ rootReal = await realpathOfNearest(root);
183
+ }
184
+ catch (err) {
185
+ return err instanceof Error ? err.message : String(err);
186
+ }
187
+ try {
188
+ forgeReal = await realpathOfNearest(ctx.forgeDir);
189
+ }
190
+ catch (err) {
191
+ return err instanceof Error ? err.message : String(err);
192
+ }
193
+ // 4. Inside the Forge
194
+ if (isInsideOrEqual(destReal, forgeReal)) {
195
+ return `${pPath} lies inside the Forge`;
196
+ }
197
+ // 5. Not strictly inside workspace (leaves through a link)
198
+ if (!isStrictlyInside(destReal, rootReal)) {
199
+ return `${pPath} leaves the workspace through a link`;
200
+ }
201
+ // 6. Walk up from parent toward root: first existing path that is not a directory
202
+ const ancestor = await firstExistingAncestor(abs, root);
203
+ if (ancestor && !ancestor.isDir) {
204
+ // Report the path relative to root, POSIX
205
+ const relPath = path.relative(root, ancestor.path).split(path.sep).join("/");
206
+ return `${relPath} is not a directory`;
207
+ }
208
+ return null;
209
+ }
210
+ /* ------------------------------------------------------------------ */
211
+ /* listRepos — present, missing, blocked */
212
+ /* ------------------------------------------------------------------ */
213
+ /**
214
+ * Classify each entry: `present` (lstat succeeds — present wins over a sync-writes check, §4.7),
215
+ * `missing` (no fault), or `blocked` (with the reason). Nothing is written.
216
+ */
217
+ export async function listRepos(root, entries, ctx) {
218
+ const results = [];
219
+ for (const entry of entries) {
220
+ const abs = path.join(root, ...entry.path.split("/"));
221
+ // Present wins (§4.7)
222
+ if (await exists(abs)) {
223
+ results.push({ ...entry, state: "present", reason: null });
224
+ continue;
225
+ }
226
+ const fault = await destinationFault(root, entry, ctx);
227
+ if (fault === null) {
228
+ results.push({ ...entry, state: "missing", reason: null });
229
+ }
230
+ else {
231
+ results.push({ ...entry, state: "blocked", reason: fault });
232
+ }
233
+ }
234
+ return results;
235
+ }
236
+ /* ------------------------------------------------------------------ */
237
+ /* planClone — C3, C4, C5 and R1–R3 */
238
+ /* ------------------------------------------------------------------ */
239
+ /**
240
+ * Plan which entries to clone. This is the one place C3 and C5 (and R1–R3) are decided and C4
241
+ * becomes a refusal (spec 37 §5.2). The real-path containment is stricter than the rest of craftar
242
+ * on purpose (§7), and the check-then-act gap is known (§7).
243
+ *
244
+ * @param root Absolute path of the workspace.
245
+ * @param profile The profile (needs `name` and `repos`).
246
+ * @param ctx Destination context (planned paths, lock paths, Forge dir).
247
+ * @param opts.present How to handle a destination that already exists: "refuse" (init) or "skip" (repos clone).
248
+ * @param opts.noEntries The message tail for C3 ("nothing to clone; drop --clone" or similar).
249
+ * @param opts.names When given, only these names are considered; compared case-insensitively.
250
+ * @returns The entries to clone (in profile order) and the skipped ones (present, unnamed).
251
+ * @throws On C3 (no entries), C4 (profileRepos fails), C5 (destination fault), R1 (unknown name), R2 (named present), R3 (name given twice).
252
+ */
253
+ export async function planClone(root, profile, ctx, opts) {
254
+ // C4: let profileRepos throw its own error
255
+ const allEntries = profileRepos(profile);
256
+ // C3: no entries
257
+ if (allEntries.length === 0) {
258
+ throw new Error(`profile ${profile.name} lists no repositories — ${opts.noEntries}`);
259
+ }
260
+ // Handle names option: R1, R3 checks, then filter
261
+ let entriesToConsider;
262
+ const namedSet = new Set(); // lower-cased names that were explicitly given
263
+ if (opts.names && opts.names.length > 0) {
264
+ // R1: check all names exist before R3
265
+ const entryNameMap = new Map();
266
+ for (const entry of allEntries) {
267
+ entryNameMap.set(entry.name.toLowerCase(), entry);
268
+ }
269
+ for (const name of opts.names) {
270
+ if (!entryNameMap.has(name.toLowerCase())) {
271
+ // R1: unknown name — print it only when it is shaped like a repository name
272
+ if (isRepoName(name) && nameShaped(name)) {
273
+ throw new Error(`profile ${profile.name} has no repository ${name}`);
274
+ }
275
+ else {
276
+ throw new Error(`profile ${profile.name}: a name given is not a repository name`);
277
+ }
278
+ }
279
+ }
280
+ // R3: check for duplicates (after R1)
281
+ const seenNames = new Map(); // lower → original
282
+ for (const name of opts.names) {
283
+ const lower = name.toLowerCase();
284
+ const existing = seenNames.get(lower);
285
+ if (existing !== undefined) {
286
+ throw new Error(`${existing} is given twice`);
287
+ }
288
+ seenNames.set(lower, name);
289
+ namedSet.add(lower);
290
+ }
291
+ // Filter to named entries, in profile order
292
+ entriesToConsider = allEntries.filter((e) => namedSet.has(e.name.toLowerCase()));
293
+ }
294
+ else {
295
+ entriesToConsider = allEntries;
296
+ }
297
+ const entries = [];
298
+ const skipped = [];
299
+ for (const entry of entriesToConsider) {
300
+ const abs = path.join(root, ...entry.path.split("/"));
301
+ const isNamed = namedSet.has(entry.name.toLowerCase());
302
+ const isPresent = await exists(abs);
303
+ if (isPresent) {
304
+ if (opts.present === "refuse") {
305
+ // C5: refuse with the exists reason
306
+ throw new Error(`cannot clone ${entry.name}: ${entry.path} already exists in the workspace — move it, or leave the clone out`);
307
+ }
308
+ else {
309
+ // present: skip
310
+ if (isNamed) {
311
+ // R2: a named entry that is present
312
+ throw new Error(`${entry.name} is present at ${entry.path} — nothing to clone`);
313
+ }
314
+ else {
315
+ skipped.push(entry);
316
+ continue;
317
+ }
318
+ }
319
+ }
320
+ // Check destination fault (C5)
321
+ const fault = await destinationFault(root, entry, ctx);
322
+ if (fault !== null) {
323
+ throw new Error(`cannot clone ${entry.name}: ${fault}`);
324
+ }
325
+ entries.push(entry);
326
+ }
327
+ return { entries, skipped };
328
+ }
329
+ /* ------------------------------------------------------------------ */
330
+ /* findGit — onPath, nothing else */
331
+ /* ------------------------------------------------------------------ */
332
+ /**
333
+ * Find `git` on the PATH. Returns the absolute path if found, or null.
334
+ * Uses `onPath` from `./proc.js` — no other lookup.
335
+ */
336
+ export async function findGit(env) {
337
+ return onPath("git", env);
338
+ }
339
+ /* ------------------------------------------------------------------ */
340
+ /* cloneRepos — sequential runner calls */
341
+ /* ------------------------------------------------------------------ */
342
+ /**
343
+ * Clone the entries sequentially, one at a time. Before each clone:
344
+ * - If `lstat(abs)` succeeds → failed "already exists", no runner call
345
+ * - If the nearest existing ancestor is not strictly inside the workspace → failed "leaves the workspace through a link"
346
+ *
347
+ * The runner is called with `GIT_ALLOW_PROTOCOL: "https:ssh"` and, when `!opts.stdinIsTty`,
348
+ * `GIT_TERMINAL_PROMPT: "0"`.
349
+ *
350
+ * @returns One result per entry: cloned or failed with a reason. Never throws for one entry.
351
+ */
352
+ export async function cloneRepos(root, entries, opts, run = spawnInherited) {
353
+ const results = [];
354
+ for (const entry of entries) {
355
+ const abs = path.join(root, ...entry.path.split("/"));
356
+ // Re-check: if destination now exists, fail
357
+ if (await exists(abs)) {
358
+ results.push({ entry, outcome: "failed", reason: "already exists" });
359
+ continue;
360
+ }
361
+ // Re-check: containment via real paths. A realpathOfNearest error (EACCES, a dangling link
362
+ // appeared, …) is reported as "leaves the workspace through a link" — fail closed rather than
363
+ // letting the clone through.
364
+ let destNearest;
365
+ let rootReal;
366
+ try {
367
+ destNearest = await realpathOfNearest(abs);
368
+ rootReal = await realpathOfNearest(root);
369
+ }
370
+ catch {
371
+ results.push({ entry, outcome: "failed", reason: "leaves the workspace through a link" });
372
+ continue;
373
+ }
374
+ if (!isStrictlyInside(destNearest, rootReal)) {
375
+ results.push({ entry, outcome: "failed", reason: "leaves the workspace through a link" });
376
+ continue;
377
+ }
378
+ // Build environment: drop repository-local variables (they would place the checkout or parts
379
+ // of it outside the checked destination) and any inherited GIT_ALLOW_PROTOCOL. Craftar's own
380
+ // values are set last, so nothing inherited can widen the transports (spec 37 §4.4, §7).
381
+ const env = {};
382
+ const isAllowProtocol = (k) => WIN ? k.toUpperCase() === "GIT_ALLOW_PROTOCOL" : k === "GIT_ALLOW_PROTOCOL";
383
+ for (const [k, v] of Object.entries(opts.env)) {
384
+ if (v !== undefined && !isLocalEnvVar(k) && !isAllowProtocol(k))
385
+ env[k] = v;
386
+ }
387
+ env.GIT_ALLOW_PROTOCOL = "https:ssh";
388
+ if (!opts.stdinIsTty) {
389
+ env.GIT_TERMINAL_PROMPT = "0";
390
+ }
391
+ // Run the clone
392
+ try {
393
+ const result = await run({
394
+ file: opts.git,
395
+ args: cloneArgs(entry),
396
+ cwd: root,
397
+ env,
398
+ stdin: "inherit",
399
+ });
400
+ if (result.code === 0) {
401
+ results.push({ entry, outcome: "cloned" });
402
+ }
403
+ else if (result.code === null) {
404
+ results.push({ entry, outcome: "failed", reason: "git was ended by a signal" });
405
+ }
406
+ else {
407
+ results.push({ entry, outcome: "failed", reason: `git exited ${result.code}` });
408
+ }
409
+ }
410
+ catch {
411
+ results.push({ entry, outcome: "failed", reason: "git could not be started" });
412
+ }
413
+ }
414
+ return results;
415
+ }
416
+ //# sourceMappingURL=clone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clone.js","sourceRoot":"","sources":["../../src/core/clone.ts"],"names":[],"mappings":"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"}