@bluewombat/isolation-git 0.1.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.
- package/README.md +62 -0
- package/dist/branch-name.d.ts +2 -0
- package/dist/branch-name.d.ts.map +1 -0
- package/dist/branch-name.js +42 -0
- package/dist/branch-name.js.map +1 -0
- package/dist/child/run-child.d.ts +42 -0
- package/dist/child/run-child.d.ts.map +1 -0
- package/dist/child/run-child.js +121 -0
- package/dist/child/run-child.js.map +1 -0
- package/dist/copy-working-files.d.ts +40 -0
- package/dist/copy-working-files.d.ts.map +1 -0
- package/dist/copy-working-files.js +144 -0
- package/dist/copy-working-files.js.map +1 -0
- package/dist/fold.d.ts +6 -0
- package/dist/fold.d.ts.map +1 -0
- package/dist/fold.js +19 -0
- package/dist/fold.js.map +1 -0
- package/dist/git-merge.d.ts +37 -0
- package/dist/git-merge.d.ts.map +1 -0
- package/dist/git-merge.js +415 -0
- package/dist/git-merge.js.map +1 -0
- package/dist/git-worktree.d.ts +37 -0
- package/dist/git-worktree.d.ts.map +1 -0
- package/dist/git-worktree.js +68 -0
- package/dist/git-worktree.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/isolation.d.ts +13 -0
- package/dist/isolation.d.ts.map +1 -0
- package/dist/isolation.js +43 -0
- package/dist/isolation.js.map +1 -0
- package/dist/reference.d.ts +15 -0
- package/dist/reference.d.ts.map +1 -0
- package/dist/reference.js +196 -0
- package/dist/reference.js.map +1 -0
- package/dist/run-env.d.ts +30 -0
- package/dist/run-env.d.ts.map +1 -0
- package/dist/run-env.js +49 -0
- package/dist/run-env.js.map +1 -0
- package/dist/strategy.d.ts +19 -0
- package/dist/strategy.d.ts.map +1 -0
- package/dist/strategy.js +44 -0
- package/dist/strategy.js.map +1 -0
- package/dist/types.d.ts +63 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
|
+
import { copyFileSync, existsSync } from "node:fs";
|
|
3
|
+
import { rm } from "node:fs/promises";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
5
|
+
import { isAbsolute, join, resolve } from "node:path";
|
|
6
|
+
import { IntegrationStoppedError, throwIfStopped } from "@bluewombat/integrator";
|
|
7
|
+
import { combinedOutput, runChild } from "./child/run-child.js";
|
|
8
|
+
import { runEnv } from "./run-env.js";
|
|
9
|
+
const CLEANUP_TIMEOUT_MS = 5_000;
|
|
10
|
+
const INCOMING_REF = "refs/integrator/incoming";
|
|
11
|
+
function remainingMs(deadlineMs, now) {
|
|
12
|
+
return Math.max(1, deadlineMs - now);
|
|
13
|
+
}
|
|
14
|
+
function parseOid(stdout) {
|
|
15
|
+
const line = stdout.trim().split(/\r?\n/)[0]?.trim();
|
|
16
|
+
if (line === undefined || !/^[0-9a-f]{40,64}$/.test(line)) {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
return line;
|
|
20
|
+
}
|
|
21
|
+
async function git(args, input) {
|
|
22
|
+
const request = {
|
|
23
|
+
argv: ["git", ...args],
|
|
24
|
+
cwd: input.cwd,
|
|
25
|
+
timeoutMs: input.timeoutMs,
|
|
26
|
+
timeoutClock: "integration",
|
|
27
|
+
shouldInterrupt: input.shouldInterrupt,
|
|
28
|
+
};
|
|
29
|
+
if (input.env !== undefined) {
|
|
30
|
+
request.env = input.env;
|
|
31
|
+
}
|
|
32
|
+
// The run's identity and credentials first, then what this call adds.
|
|
33
|
+
request.envOverrides = { ...runEnv(), ...input.envOverrides };
|
|
34
|
+
const outcome = await runChild(request);
|
|
35
|
+
if (outcome.kind === "interrupted") {
|
|
36
|
+
return { ok: false, stop: "interrupt" };
|
|
37
|
+
}
|
|
38
|
+
if (outcome.kind === "timed_out") {
|
|
39
|
+
return { ok: false, stop: "clock" };
|
|
40
|
+
}
|
|
41
|
+
if (outcome.kind === "spawn_error") {
|
|
42
|
+
return { ok: false, detail: `Git could not complete the Integration: ${outcome.detail}` };
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
ok: true,
|
|
46
|
+
stdout: outcome.stdout,
|
|
47
|
+
stderr: outcome.stderr,
|
|
48
|
+
exitCode: outcome.exitCode ?? 1,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function gitFailed(result) {
|
|
52
|
+
const detail = combinedOutput(result.stdout, result.stderr) || "git command failed.";
|
|
53
|
+
return { ok: false, detail: `Git could not complete the Integration: ${detail}` };
|
|
54
|
+
}
|
|
55
|
+
async function restoreGitState(input) {
|
|
56
|
+
const quiet = { cwd: input.parent, timeoutMs: CLEANUP_TIMEOUT_MS, shouldInterrupt: () => false };
|
|
57
|
+
await git(["merge", "--abort"], quiet);
|
|
58
|
+
await git(["update-ref", "-d", "MERGE_HEAD"], quiet);
|
|
59
|
+
await git(["update-ref", "-d", INCOMING_REF], quiet);
|
|
60
|
+
if (input.savedHead !== undefined) {
|
|
61
|
+
await git(["update-ref", "HEAD", input.savedHead], quiet);
|
|
62
|
+
}
|
|
63
|
+
if (input.indexBackup !== undefined && existsSync(input.indexBackup)) {
|
|
64
|
+
const indexPath = await git(["rev-parse", "--git-path", "index"], quiet);
|
|
65
|
+
if (indexPath.ok && indexPath.exitCode === 0) {
|
|
66
|
+
const raw = indexPath.stdout.trim();
|
|
67
|
+
const dest = isAbsolute(raw) ? raw : join(input.parent, raw);
|
|
68
|
+
try {
|
|
69
|
+
copyFileSync(input.indexBackup, dest);
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// best-effort index restore
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Three-way git merge of Child working files into Parent. Never forced.
|
|
79
|
+
* Does not fall back to copy.
|
|
80
|
+
*
|
|
81
|
+
* History is left only where something happened: a side with nothing loose
|
|
82
|
+
* gets no snapshot commit, a Parent that never moved is fast-forwarded, and a
|
|
83
|
+
* merge commit exists only when both sides moved. What is written is named
|
|
84
|
+
* after the work (`subject`), not after this mechanism.
|
|
85
|
+
*/
|
|
86
|
+
export async function gitMerge(input) {
|
|
87
|
+
const { parent, child, id, deadlineMs, now, shouldInterrupt } = input;
|
|
88
|
+
const name = id === undefined ? "Integration" : `Integration of ${id}`;
|
|
89
|
+
const subject = input.subject ?? name;
|
|
90
|
+
const mergeSubject = input.mergeSubject ?? name;
|
|
91
|
+
const shouldStop = () => {
|
|
92
|
+
if (shouldInterrupt()) {
|
|
93
|
+
return "interrupt";
|
|
94
|
+
}
|
|
95
|
+
if (now() >= deadlineMs) {
|
|
96
|
+
return "clock";
|
|
97
|
+
}
|
|
98
|
+
return undefined;
|
|
99
|
+
};
|
|
100
|
+
let savedHead;
|
|
101
|
+
let indexBackup;
|
|
102
|
+
let wroteParent = false;
|
|
103
|
+
const timed = () => ({
|
|
104
|
+
cwd: parent,
|
|
105
|
+
timeoutMs: remainingMs(deadlineMs, now()),
|
|
106
|
+
shouldInterrupt,
|
|
107
|
+
});
|
|
108
|
+
const failRestore = async (result) => {
|
|
109
|
+
await restoreGitState({ parent, savedHead, indexBackup });
|
|
110
|
+
return result;
|
|
111
|
+
};
|
|
112
|
+
/** HEAD is this commit now; the working tree already matches it. */
|
|
113
|
+
const settle = async (oid) => {
|
|
114
|
+
if (oid !== savedHead) {
|
|
115
|
+
const updated = await git(["update-ref", "HEAD", oid], timed());
|
|
116
|
+
if (!updated.ok) {
|
|
117
|
+
return failRestore(updated);
|
|
118
|
+
}
|
|
119
|
+
if (updated.exitCode !== 0) {
|
|
120
|
+
return failRestore(gitFailed(updated));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
await git(["update-ref", "-d", INCOMING_REF], {
|
|
124
|
+
cwd: parent,
|
|
125
|
+
timeoutMs: CLEANUP_TIMEOUT_MS,
|
|
126
|
+
shouldInterrupt: () => false,
|
|
127
|
+
});
|
|
128
|
+
if (indexBackup !== undefined) {
|
|
129
|
+
await rm(indexBackup, { force: true });
|
|
130
|
+
}
|
|
131
|
+
return { ok: true };
|
|
132
|
+
};
|
|
133
|
+
try {
|
|
134
|
+
await throwIfStopped(shouldStop);
|
|
135
|
+
if (!existsSync(join(child, ".git"))) {
|
|
136
|
+
return {
|
|
137
|
+
ok: false,
|
|
138
|
+
detail: "Git could not complete the Integration: Child is not usable as a git incoming side.",
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
const head = await git(["rev-parse", "HEAD"], timed());
|
|
142
|
+
if (!head.ok) {
|
|
143
|
+
return head;
|
|
144
|
+
}
|
|
145
|
+
if (head.exitCode === 0) {
|
|
146
|
+
const oid = parseOid(head.stdout);
|
|
147
|
+
if (oid !== null) {
|
|
148
|
+
savedHead = oid;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
const indexPathResult = await git(["rev-parse", "--git-path", "index"], timed());
|
|
152
|
+
if (!indexPathResult.ok) {
|
|
153
|
+
return indexPathResult;
|
|
154
|
+
}
|
|
155
|
+
if (indexPathResult.exitCode === 0) {
|
|
156
|
+
const raw = indexPathResult.stdout.trim();
|
|
157
|
+
const indexPath = isAbsolute(raw) ? raw : join(parent, raw);
|
|
158
|
+
if (existsSync(indexPath)) {
|
|
159
|
+
indexBackup = join(tmpdir(), `integrator-index-${randomBytes(8).toString("hex")}`);
|
|
160
|
+
copyFileSync(indexPath, indexBackup);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
const parentCommit = await writeWorkingTreeCommit({
|
|
164
|
+
cwd: parent,
|
|
165
|
+
subject,
|
|
166
|
+
deadlineMs,
|
|
167
|
+
now,
|
|
168
|
+
shouldInterrupt,
|
|
169
|
+
});
|
|
170
|
+
if (!parentCommit.ok) {
|
|
171
|
+
return failRestore(parentCommit);
|
|
172
|
+
}
|
|
173
|
+
const childCommit = await writeWorkingTreeCommit({
|
|
174
|
+
cwd: child,
|
|
175
|
+
subject,
|
|
176
|
+
deadlineMs,
|
|
177
|
+
now,
|
|
178
|
+
shouldInterrupt,
|
|
179
|
+
});
|
|
180
|
+
if (!childCommit.ok) {
|
|
181
|
+
return failRestore(childCommit);
|
|
182
|
+
}
|
|
183
|
+
const incoming = await ensureIncomingCommit({
|
|
184
|
+
parent,
|
|
185
|
+
child,
|
|
186
|
+
childCommit: childCommit.oid,
|
|
187
|
+
deadlineMs,
|
|
188
|
+
now,
|
|
189
|
+
shouldInterrupt,
|
|
190
|
+
});
|
|
191
|
+
if (!incoming.ok) {
|
|
192
|
+
return failRestore(incoming);
|
|
193
|
+
}
|
|
194
|
+
await throwIfStopped(shouldStop);
|
|
195
|
+
// Nothing to fold: the Parent already holds everything the Child has.
|
|
196
|
+
if (incoming.oid === parentCommit.oid) {
|
|
197
|
+
return await settle(parentCommit.oid);
|
|
198
|
+
}
|
|
199
|
+
const behind = await isAncestor(incoming.oid, parentCommit.oid, timed());
|
|
200
|
+
if (!behind.ok) {
|
|
201
|
+
return failRestore(behind);
|
|
202
|
+
}
|
|
203
|
+
if (behind.value) {
|
|
204
|
+
return await settle(parentCommit.oid);
|
|
205
|
+
}
|
|
206
|
+
// Only the Child moved: the Parent takes its history as is.
|
|
207
|
+
const ahead = await isAncestor(parentCommit.oid, incoming.oid, timed());
|
|
208
|
+
if (!ahead.ok) {
|
|
209
|
+
return failRestore(ahead);
|
|
210
|
+
}
|
|
211
|
+
if (ahead.value) {
|
|
212
|
+
wroteParent = true;
|
|
213
|
+
const tree = await git(["rev-parse", `${incoming.oid}^{tree}`], timed());
|
|
214
|
+
if (!tree.ok) {
|
|
215
|
+
return failRestore(tree);
|
|
216
|
+
}
|
|
217
|
+
const incomingTree = parseOid(tree.stdout);
|
|
218
|
+
if (tree.exitCode !== 0 || incomingTree === null) {
|
|
219
|
+
return failRestore(gitFailed(tree));
|
|
220
|
+
}
|
|
221
|
+
const checkout = await git(["read-tree", "-u", "--reset", incomingTree], timed());
|
|
222
|
+
if (!checkout.ok) {
|
|
223
|
+
return failRestore(checkout);
|
|
224
|
+
}
|
|
225
|
+
if (checkout.exitCode !== 0) {
|
|
226
|
+
return failRestore(gitFailed(checkout));
|
|
227
|
+
}
|
|
228
|
+
return await settle(incoming.oid);
|
|
229
|
+
}
|
|
230
|
+
const merged = await git(["merge-tree", "--write-tree", parentCommit.oid, incoming.oid], timed());
|
|
231
|
+
if (!merged.ok) {
|
|
232
|
+
return failRestore(merged);
|
|
233
|
+
}
|
|
234
|
+
if (merged.exitCode === 1) {
|
|
235
|
+
return failRestore({
|
|
236
|
+
ok: false,
|
|
237
|
+
conflict: true,
|
|
238
|
+
report: "Cannot fold without choosing a side: overlapping independent changes.",
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
if (merged.exitCode !== 0) {
|
|
242
|
+
return failRestore(gitFailed(merged));
|
|
243
|
+
}
|
|
244
|
+
const treeOid = parseOid(merged.stdout);
|
|
245
|
+
if (treeOid === null) {
|
|
246
|
+
return failRestore({
|
|
247
|
+
ok: false,
|
|
248
|
+
detail: "Git could not complete the Integration: merge-tree did not return a tree.",
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
await throwIfStopped(shouldStop);
|
|
252
|
+
wroteParent = true;
|
|
253
|
+
const checkout = await git(["read-tree", "-u", "--reset", treeOid], timed());
|
|
254
|
+
if (!checkout.ok) {
|
|
255
|
+
return failRestore(checkout);
|
|
256
|
+
}
|
|
257
|
+
if (checkout.exitCode !== 0) {
|
|
258
|
+
return failRestore(gitFailed(checkout));
|
|
259
|
+
}
|
|
260
|
+
const mergeCommit = await git(["commit-tree", treeOid, "-p", parentCommit.oid, "-p", incoming.oid, "-m", mergeSubject], timed());
|
|
261
|
+
if (!mergeCommit.ok) {
|
|
262
|
+
return failRestore(mergeCommit);
|
|
263
|
+
}
|
|
264
|
+
if (mergeCommit.exitCode !== 0) {
|
|
265
|
+
return failRestore(gitFailed(mergeCommit));
|
|
266
|
+
}
|
|
267
|
+
const mergeOid = parseOid(mergeCommit.stdout);
|
|
268
|
+
if (mergeOid === null) {
|
|
269
|
+
return failRestore({
|
|
270
|
+
ok: false,
|
|
271
|
+
detail: "Git could not complete the Integration: commit-tree did not return a commit.",
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
return await settle(mergeOid);
|
|
275
|
+
}
|
|
276
|
+
catch (error) {
|
|
277
|
+
if (error instanceof IntegrationStoppedError) {
|
|
278
|
+
await restoreGitState({ parent, savedHead, indexBackup });
|
|
279
|
+
return { ok: false, stop: error.stop };
|
|
280
|
+
}
|
|
281
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
282
|
+
await restoreGitState({ parent, savedHead, indexBackup });
|
|
283
|
+
return {
|
|
284
|
+
ok: false,
|
|
285
|
+
detail: wroteParent
|
|
286
|
+
? `Integration could not complete: ${detail}`
|
|
287
|
+
: `Git could not complete the Integration: ${detail}`,
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
async function isAncestor(ancestor, descendant, input) {
|
|
292
|
+
const result = await git(["merge-base", "--is-ancestor", ancestor, descendant], input);
|
|
293
|
+
if (!result.ok) {
|
|
294
|
+
return result;
|
|
295
|
+
}
|
|
296
|
+
if (result.exitCode === 0) {
|
|
297
|
+
return { ok: true, value: true };
|
|
298
|
+
}
|
|
299
|
+
if (result.exitCode === 1) {
|
|
300
|
+
return { ok: true, value: false };
|
|
301
|
+
}
|
|
302
|
+
return gitFailed(result);
|
|
303
|
+
}
|
|
304
|
+
async function writeWorkingTreeCommit(input) {
|
|
305
|
+
const indexFile = join(tmpdir(), `integrator-idx-${randomBytes(8).toString("hex")}`);
|
|
306
|
+
const envOverrides = { GIT_INDEX_FILE: indexFile };
|
|
307
|
+
const timed = () => ({
|
|
308
|
+
cwd: input.cwd,
|
|
309
|
+
timeoutMs: remainingMs(input.deadlineMs, input.now()),
|
|
310
|
+
shouldInterrupt: input.shouldInterrupt,
|
|
311
|
+
envOverrides,
|
|
312
|
+
});
|
|
313
|
+
try {
|
|
314
|
+
const add = await git(["add", "-A", "-f"], timed());
|
|
315
|
+
if (!add.ok) {
|
|
316
|
+
return add;
|
|
317
|
+
}
|
|
318
|
+
if (add.exitCode !== 0) {
|
|
319
|
+
return gitFailed(add);
|
|
320
|
+
}
|
|
321
|
+
const tree = await git(["write-tree"], timed());
|
|
322
|
+
if (!tree.ok) {
|
|
323
|
+
return tree;
|
|
324
|
+
}
|
|
325
|
+
if (tree.exitCode !== 0) {
|
|
326
|
+
return gitFailed(tree);
|
|
327
|
+
}
|
|
328
|
+
const treeOid = parseOid(tree.stdout);
|
|
329
|
+
if (treeOid === null) {
|
|
330
|
+
return {
|
|
331
|
+
ok: false,
|
|
332
|
+
detail: "Git could not complete the Integration: write-tree did not return a tree.",
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
const commitArgs = ["commit-tree", treeOid, "-m", input.subject];
|
|
336
|
+
const head = await git(["rev-parse", "HEAD", "HEAD^{tree}"], {
|
|
337
|
+
cwd: input.cwd,
|
|
338
|
+
timeoutMs: remainingMs(input.deadlineMs, input.now()),
|
|
339
|
+
shouldInterrupt: input.shouldInterrupt,
|
|
340
|
+
});
|
|
341
|
+
if (!head.ok) {
|
|
342
|
+
return head;
|
|
343
|
+
}
|
|
344
|
+
if (head.exitCode === 0) {
|
|
345
|
+
const [headLine, headTreeLine] = head.stdout.trim().split(/\r?\n/);
|
|
346
|
+
const headOid = parseOid(headLine ?? "");
|
|
347
|
+
if (headOid !== null) {
|
|
348
|
+
// Nothing loose: HEAD already is the snapshot.
|
|
349
|
+
if (parseOid(headTreeLine ?? "") === treeOid) {
|
|
350
|
+
return { ok: true, oid: headOid };
|
|
351
|
+
}
|
|
352
|
+
commitArgs.push("-p", headOid);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
const commit = await git(commitArgs, {
|
|
356
|
+
cwd: input.cwd,
|
|
357
|
+
timeoutMs: remainingMs(input.deadlineMs, input.now()),
|
|
358
|
+
shouldInterrupt: input.shouldInterrupt,
|
|
359
|
+
envOverrides,
|
|
360
|
+
});
|
|
361
|
+
if (!commit.ok) {
|
|
362
|
+
return commit;
|
|
363
|
+
}
|
|
364
|
+
if (commit.exitCode !== 0) {
|
|
365
|
+
return gitFailed(commit);
|
|
366
|
+
}
|
|
367
|
+
const oid = parseOid(commit.stdout);
|
|
368
|
+
if (oid === null) {
|
|
369
|
+
return {
|
|
370
|
+
ok: false,
|
|
371
|
+
detail: "Git could not complete the Integration: commit-tree did not return a commit.",
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
return { ok: true, oid };
|
|
375
|
+
}
|
|
376
|
+
finally {
|
|
377
|
+
await rm(indexFile, { force: true });
|
|
378
|
+
await rm(`${indexFile}.lock`, { force: true });
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
async function ensureIncomingCommit(input) {
|
|
382
|
+
const timed = (cwd) => ({
|
|
383
|
+
cwd,
|
|
384
|
+
timeoutMs: remainingMs(input.deadlineMs, input.now()),
|
|
385
|
+
shouldInterrupt: input.shouldInterrupt,
|
|
386
|
+
});
|
|
387
|
+
const parentCommon = await git(["rev-parse", "--path-format=absolute", "--git-common-dir"], timed(input.parent));
|
|
388
|
+
if (!parentCommon.ok) {
|
|
389
|
+
return parentCommon;
|
|
390
|
+
}
|
|
391
|
+
if (parentCommon.exitCode !== 0) {
|
|
392
|
+
return gitFailed(parentCommon);
|
|
393
|
+
}
|
|
394
|
+
const childCommon = await git(["rev-parse", "--path-format=absolute", "--git-common-dir"], timed(input.child));
|
|
395
|
+
if (!childCommon.ok) {
|
|
396
|
+
return childCommon;
|
|
397
|
+
}
|
|
398
|
+
if (childCommon.exitCode !== 0) {
|
|
399
|
+
return gitFailed(childCommon);
|
|
400
|
+
}
|
|
401
|
+
const parentDir = resolve(parentCommon.stdout.trim());
|
|
402
|
+
const childDir = resolve(childCommon.stdout.trim());
|
|
403
|
+
if (parentDir === childDir) {
|
|
404
|
+
return { ok: true, oid: input.childCommit };
|
|
405
|
+
}
|
|
406
|
+
const fetched = await git(["fetch", "--no-tags", input.child, `${input.childCommit}:${INCOMING_REF}`], timed(input.parent));
|
|
407
|
+
if (!fetched.ok) {
|
|
408
|
+
return fetched;
|
|
409
|
+
}
|
|
410
|
+
if (fetched.exitCode !== 0) {
|
|
411
|
+
return gitFailed(fetched);
|
|
412
|
+
}
|
|
413
|
+
return { ok: true, oid: input.childCommit };
|
|
414
|
+
}
|
|
415
|
+
//# sourceMappingURL=git-merge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-merge.js","sourceRoot":"","sources":["../src/git-merge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { IsolationStop } from "@bluewombat/isolator";
|
|
2
|
+
export type GitAddResult = {
|
|
3
|
+
ok: true;
|
|
4
|
+
} | {
|
|
5
|
+
ok: false;
|
|
6
|
+
stop: IsolationStop;
|
|
7
|
+
} | {
|
|
8
|
+
ok: false;
|
|
9
|
+
detail: string;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Attach a git worktree at `child` from `parent`. Does not copy working files.
|
|
13
|
+
*
|
|
14
|
+
* `-B` points the name at the Parent's current commit whether or not it already
|
|
15
|
+
* exists, so an Isolation that runs again lands where a first one would: the
|
|
16
|
+
* Child is a snapshot of the Parent, never the leftovers of an earlier run.
|
|
17
|
+
*
|
|
18
|
+
* A Child that was deleted from disk is still registered with the Parent, and
|
|
19
|
+
* git refuses to check its branch out a second time — so an Isolation that runs
|
|
20
|
+
* again would fail on the trace of the first. Pruning first forgets every
|
|
21
|
+
* worktree whose directory is gone, and nothing else.
|
|
22
|
+
*/
|
|
23
|
+
export declare function addGitWorktree(input: {
|
|
24
|
+
parent: string;
|
|
25
|
+
child: string;
|
|
26
|
+
branch?: string;
|
|
27
|
+
timeoutMs: number;
|
|
28
|
+
shouldInterrupt: () => boolean;
|
|
29
|
+
}): Promise<GitAddResult>;
|
|
30
|
+
/**
|
|
31
|
+
* Drop Isolation bookkeeping for an incomplete git Child. Best-effort.
|
|
32
|
+
*/
|
|
33
|
+
export declare function removeGitWorktree(input: {
|
|
34
|
+
parent: string;
|
|
35
|
+
child: string;
|
|
36
|
+
}): Promise<void>;
|
|
37
|
+
//# sourceMappingURL=git-worktree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-worktree.d.ts","sourceRoot":"","sources":["../src/git-worktree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAK1D,MAAM,MAAM,YAAY,GACpB;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GACZ;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,aAAa,CAAA;CAAE,GAClC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAElC;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,OAAO,CAAC;CAChC,GAAG,OAAO,CAAC,YAAY,CAAC,CAmCxB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAe/F"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { combinedOutput, runChild } from "./child/run-child.js";
|
|
2
|
+
const CLEANUP_TIMEOUT_MS = 5_000;
|
|
3
|
+
/**
|
|
4
|
+
* Attach a git worktree at `child` from `parent`. Does not copy working files.
|
|
5
|
+
*
|
|
6
|
+
* `-B` points the name at the Parent's current commit whether or not it already
|
|
7
|
+
* exists, so an Isolation that runs again lands where a first one would: the
|
|
8
|
+
* Child is a snapshot of the Parent, never the leftovers of an earlier run.
|
|
9
|
+
*
|
|
10
|
+
* A Child that was deleted from disk is still registered with the Parent, and
|
|
11
|
+
* git refuses to check its branch out a second time — so an Isolation that runs
|
|
12
|
+
* again would fail on the trace of the first. Pruning first forgets every
|
|
13
|
+
* worktree whose directory is gone, and nothing else.
|
|
14
|
+
*/
|
|
15
|
+
export async function addGitWorktree(input) {
|
|
16
|
+
await runChild({
|
|
17
|
+
argv: ["git", "-C", input.parent, "worktree", "prune"],
|
|
18
|
+
cwd: input.parent,
|
|
19
|
+
timeoutMs: CLEANUP_TIMEOUT_MS,
|
|
20
|
+
timeoutClock: "isolation",
|
|
21
|
+
shouldInterrupt: input.shouldInterrupt,
|
|
22
|
+
});
|
|
23
|
+
const placement = input.branch === undefined ? ["--detach", input.child] : ["-B", input.branch, input.child];
|
|
24
|
+
const outcome = await runChild({
|
|
25
|
+
argv: ["git", "-C", input.parent, "worktree", "add", ...placement],
|
|
26
|
+
cwd: input.parent,
|
|
27
|
+
timeoutMs: input.timeoutMs,
|
|
28
|
+
timeoutClock: "isolation",
|
|
29
|
+
shouldInterrupt: input.shouldInterrupt,
|
|
30
|
+
});
|
|
31
|
+
if (outcome.kind === "interrupted") {
|
|
32
|
+
return { ok: false, stop: "interrupt" };
|
|
33
|
+
}
|
|
34
|
+
if (outcome.kind === "timed_out") {
|
|
35
|
+
return { ok: false, stop: "clock" };
|
|
36
|
+
}
|
|
37
|
+
if (outcome.kind === "spawn_error") {
|
|
38
|
+
return {
|
|
39
|
+
ok: false,
|
|
40
|
+
detail: `Git could not complete the Isolation: ${outcome.detail}`,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
if (outcome.exitCode !== 0) {
|
|
44
|
+
const detail = combinedOutput(outcome.stdout, outcome.stderr) || "git worktree add failed.";
|
|
45
|
+
return { ok: false, detail: `Git could not complete the Isolation: ${detail}` };
|
|
46
|
+
}
|
|
47
|
+
return { ok: true };
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Drop Isolation bookkeeping for an incomplete git Child. Best-effort.
|
|
51
|
+
*/
|
|
52
|
+
export async function removeGitWorktree(input) {
|
|
53
|
+
await runChild({
|
|
54
|
+
argv: ["git", "-C", input.parent, "worktree", "remove", "--force", input.child],
|
|
55
|
+
cwd: input.parent,
|
|
56
|
+
timeoutMs: CLEANUP_TIMEOUT_MS,
|
|
57
|
+
timeoutClock: "isolation",
|
|
58
|
+
shouldInterrupt: () => false,
|
|
59
|
+
});
|
|
60
|
+
await runChild({
|
|
61
|
+
argv: ["git", "-C", input.parent, "worktree", "prune"],
|
|
62
|
+
cwd: input.parent,
|
|
63
|
+
timeoutMs: CLEANUP_TIMEOUT_MS,
|
|
64
|
+
timeoutClock: "isolation",
|
|
65
|
+
shouldInterrupt: () => false,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=git-worktree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-worktree.js","sourceRoot":"","sources":["../src/git-worktree.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhE,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAOjC;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAMpC;IACC,MAAM,QAAQ,CAAC;QACb,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC;QACtD,GAAG,EAAE,KAAK,CAAC,MAAM;QACjB,SAAS,EAAE,kBAAkB;QAC7B,YAAY,EAAE,WAAW;QACzB,eAAe,EAAE,KAAK,CAAC,eAAe;KACvC,CAAC,CAAC;IACH,MAAM,SAAS,GACb,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7F,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC;QAC7B,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;QAClE,GAAG,EAAE,KAAK,CAAC,MAAM;QACjB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,YAAY,EAAE,WAAW;QACzB,eAAe,EAAE,KAAK,CAAC,eAAe;KACvC,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACnC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAC1C,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACjC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACtC,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACnC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,yCAAyC,OAAO,CAAC,MAAM,EAAE;SAClE,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,0BAA0B,CAAC;QAC5F,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,yCAAyC,MAAM,EAAE,EAAE,CAAC;IAClF,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAAwC;IAC9E,MAAM,QAAQ,CAAC;QACb,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC;QAC/E,GAAG,EAAE,KAAK,CAAC,MAAM;QACjB,SAAS,EAAE,kBAAkB;QAC7B,YAAY,EAAE,WAAW;QACzB,eAAe,EAAE,GAAG,EAAE,CAAC,KAAK;KAC7B,CAAC,CAAC;IACH,MAAM,QAAQ,CAAC;QACb,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC;QACtD,GAAG,EAAE,KAAK,CAAC,MAAM;QACjB,SAAS,EAAE,kBAAkB;QAC7B,YAAY,EAAE,WAAW;QACzB,eAAe,EAAE,GAAG,EAAE,CAAC,KAAK;KAC7B,CAAC,CAAC;AACL,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Isolation by git worktree: attach adds a worktree then copies dirty files;
|
|
3
|
+
* fold is a three-way merge; a reference work line is a remote and a branch,
|
|
4
|
+
* kept as a single-branch clone. Host loads this when `workLine.isolation` is
|
|
5
|
+
* `@bluewombat/isolation-git`, and hands `workLine.isolationOptions` to
|
|
6
|
+
* `createStrategy` when the config has any.
|
|
7
|
+
*/
|
|
8
|
+
export { branchNameOf } from "./branch-name.js";
|
|
9
|
+
export { DEFAULT_EXCLUDES, isExcluded } from "./copy-working-files.js";
|
|
10
|
+
export { gitReference } from "./reference.js";
|
|
11
|
+
export type { GitIdentity } from "./run-env.js";
|
|
12
|
+
export { clearRunEnv, runEnv, setRunEnv } from "./run-env.js";
|
|
13
|
+
export { createStrategy, strategy } from "./strategy.js";
|
|
14
|
+
export type { IsolationStrategy, ParsedReference, ReferenceBackend, ReferenceCopyState, } from "./types.js";
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzD,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Isolation by git worktree: attach adds a worktree then copies dirty files;
|
|
3
|
+
* fold is a three-way merge; a reference work line is a remote and a branch,
|
|
4
|
+
* kept as a single-branch clone. Host loads this when `workLine.isolation` is
|
|
5
|
+
* `@bluewombat/isolation-git`, and hands `workLine.isolationOptions` to
|
|
6
|
+
* `createStrategy` when the config has any.
|
|
7
|
+
*/
|
|
8
|
+
export { branchNameOf } from "./branch-name.js";
|
|
9
|
+
export { DEFAULT_EXCLUDES, isExcluded } from "./copy-working-files.js";
|
|
10
|
+
export { gitReference } from "./reference.js";
|
|
11
|
+
export { clearRunEnv, runEnv, setRunEnv } from "./run-env.js";
|
|
12
|
+
export { createStrategy, strategy } from "./strategy.js";
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { IsolationBackend } from "@bluewombat/isolator";
|
|
2
|
+
export type GitIsolationOptions = {
|
|
3
|
+
/** Paths that never reach a Child; see `isExcluded` for the shape. */
|
|
4
|
+
exclude: readonly string[];
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Isolation by git worktree, then a working-file copy so the Child matches the
|
|
8
|
+
* Parent's dirty tree, not only HEAD — less what `exclude` names.
|
|
9
|
+
*/
|
|
10
|
+
export declare function createGitIsolation(options: GitIsolationOptions): IsolationBackend;
|
|
11
|
+
/** The backend with nothing but the default exclusions. */
|
|
12
|
+
export declare const gitIsolation: IsolationBackend;
|
|
13
|
+
//# sourceMappingURL=isolation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isolation.d.ts","sourceRoot":"","sources":["../src/isolation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAK7D,MAAM,MAAM,mBAAmB,GAAG;IAChC,sEAAsE;IACtE,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,gBAAgB,CAgCjF;AAED,2DAA2D;AAC3D,eAAO,MAAM,YAAY,EAAE,gBAAoE,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { branchNameOf } from "./branch-name.js";
|
|
2
|
+
import { copyWorkingFiles, DEFAULT_EXCLUDES, wipeWorkingFiles } from "./copy-working-files.js";
|
|
3
|
+
import { addGitWorktree, removeGitWorktree } from "./git-worktree.js";
|
|
4
|
+
/**
|
|
5
|
+
* Isolation by git worktree, then a working-file copy so the Child matches the
|
|
6
|
+
* Parent's dirty tree, not only HEAD — less what `exclude` names.
|
|
7
|
+
*/
|
|
8
|
+
export function createGitIsolation(options) {
|
|
9
|
+
return {
|
|
10
|
+
async attach(input) {
|
|
11
|
+
const branch = input.id === undefined ? undefined : branchNameOf(input.id);
|
|
12
|
+
const added = await addGitWorktree({
|
|
13
|
+
parent: input.parent,
|
|
14
|
+
child: input.child,
|
|
15
|
+
...(branch === undefined ? {} : { branch }),
|
|
16
|
+
timeoutMs: input.timeoutMs,
|
|
17
|
+
shouldInterrupt: input.shouldInterrupt,
|
|
18
|
+
});
|
|
19
|
+
if (!added.ok) {
|
|
20
|
+
return added;
|
|
21
|
+
}
|
|
22
|
+
const stop = input.shouldStop();
|
|
23
|
+
if (stop !== undefined) {
|
|
24
|
+
return { ok: false, stop };
|
|
25
|
+
}
|
|
26
|
+
await wipeWorkingFiles(input.child, input.shouldStop);
|
|
27
|
+
await copyWorkingFiles({
|
|
28
|
+
from: input.parent,
|
|
29
|
+
to: input.child,
|
|
30
|
+
skipGitAtRoot: true,
|
|
31
|
+
exclude: options.exclude,
|
|
32
|
+
shouldStop: input.shouldStop,
|
|
33
|
+
});
|
|
34
|
+
return { ok: true };
|
|
35
|
+
},
|
|
36
|
+
async abort(input) {
|
|
37
|
+
await removeGitWorktree(input);
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/** The backend with nothing but the default exclusions. */
|
|
42
|
+
export const gitIsolation = createGitIsolation({ exclude: DEFAULT_EXCLUDES });
|
|
43
|
+
//# sourceMappingURL=isolation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isolation.js","sourceRoot":"","sources":["../src/isolation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC/F,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAOtE;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAA4B;IAC7D,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,KAAK;YAChB,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC3E,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC;gBACjC,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;gBAC3C,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,eAAe,EAAE,KAAK,CAAC,eAAe;aACvC,CAAC,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBACd,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;YAChC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAC7B,CAAC;YACD,MAAM,gBAAgB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YACtD,MAAM,gBAAgB,CAAC;gBACrB,IAAI,EAAE,KAAK,CAAC,MAAM;gBAClB,EAAE,EAAE,KAAK,CAAC,KAAK;gBACf,aAAa,EAAE,IAAI;gBACnB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,UAAU,EAAE,KAAK,CAAC,UAAU;aAC7B,CAAC,CAAC;YACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;QACtB,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,KAAK;YACf,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,2DAA2D;AAC3D,MAAM,CAAC,MAAM,YAAY,GAAqB,kBAAkB,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC"}
|