steroids-cli 0.9.10 → 0.9.12
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/dist/commands/runners-parallel.d.ts.map +1 -1
- package/dist/commands/runners-parallel.js +16 -4
- package/dist/commands/runners-parallel.js.map +1 -1
- package/dist/parallel/merge-commit-checks.d.ts +6 -0
- package/dist/parallel/merge-commit-checks.d.ts.map +1 -0
- package/dist/parallel/merge-commit-checks.js +28 -0
- package/dist/parallel/merge-commit-checks.js.map +1 -0
- package/dist/parallel/merge-process.d.ts +21 -0
- package/dist/parallel/merge-process.d.ts.map +1 -0
- package/dist/parallel/merge-process.js +104 -0
- package/dist/parallel/merge-process.js.map +1 -0
- package/dist/parallel/merge-sealing.d.ts +11 -0
- package/dist/parallel/merge-sealing.d.ts.map +1 -0
- package/dist/parallel/merge-sealing.js +64 -0
- package/dist/parallel/merge-sealing.js.map +1 -0
- package/dist/parallel/merge-validation.d.ts +6 -0
- package/dist/parallel/merge-validation.d.ts.map +1 -0
- package/dist/parallel/merge-validation.js +57 -0
- package/dist/parallel/merge-validation.js.map +1 -0
- package/dist/parallel/merge-workspace.d.ts +8 -0
- package/dist/parallel/merge-workspace.d.ts.map +1 -0
- package/dist/parallel/merge-workspace.js +37 -0
- package/dist/parallel/merge-workspace.js.map +1 -0
- package/dist/parallel/merge.d.ts +10 -5
- package/dist/parallel/merge.d.ts.map +1 -1
- package/dist/parallel/merge.js +22 -246
- package/dist/parallel/merge.js.map +1 -1
- package/dist/runners/daemon.d.ts.map +1 -1
- package/dist/runners/daemon.js +16 -0
- package/dist/runners/daemon.js.map +1 -1
- package/dist/runners/wakeup-checks.d.ts +14 -0
- package/dist/runners/wakeup-checks.d.ts.map +1 -0
- package/dist/runners/wakeup-checks.js +85 -0
- package/dist/runners/wakeup-checks.js.map +1 -0
- package/dist/runners/wakeup-reconcile.d.ts +10 -0
- package/dist/runners/wakeup-reconcile.d.ts.map +1 -0
- package/dist/runners/wakeup-reconcile.js +84 -0
- package/dist/runners/wakeup-reconcile.js.map +1 -0
- package/dist/runners/wakeup-runner.d.ts +18 -0
- package/dist/runners/wakeup-runner.d.ts.map +1 -0
- package/dist/runners/wakeup-runner.js +47 -0
- package/dist/runners/wakeup-runner.js.map +1 -0
- package/dist/runners/wakeup-sanitise.d.ts +24 -0
- package/dist/runners/wakeup-sanitise.d.ts.map +1 -0
- package/dist/runners/wakeup-sanitise.js +247 -0
- package/dist/runners/wakeup-sanitise.js.map +1 -0
- package/dist/runners/wakeup-timing.d.ts +12 -0
- package/dist/runners/wakeup-timing.d.ts.map +1 -0
- package/dist/runners/wakeup-timing.js +37 -0
- package/dist/runners/wakeup-timing.js.map +1 -0
- package/dist/runners/wakeup.d.ts +7 -8
- package/dist/runners/wakeup.d.ts.map +1 -1
- package/dist/runners/wakeup.js +26 -433
- package/dist/runners/wakeup.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runners-parallel.d.ts","sourceRoot":"","sources":["../../src/commands/runners-parallel.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,qBAAqB,EAA0B,MAAM,0BAA0B,CAAC;AAGzF,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,KAAK,CAAC;QACjB,EAAE,EAAE,MAAM,CAAC;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC,CAAC;CACJ;AAUD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAKvD;AAyBD,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,GAAG,IAAI,CAe1F;AAED,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAOlE;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,sBAAsB,
|
|
1
|
+
{"version":3,"file":"runners-parallel.d.ts","sourceRoot":"","sources":["../../src/commands/runners-parallel.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,qBAAqB,EAA0B,MAAM,0BAA0B,CAAC;AAGzF,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,KAAK,CAAC;QACjB,EAAE,EAAE,MAAM,CAAC;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC,CAAC;CACJ;AAUD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAKvD;AAyBD,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,GAAG,IAAI,CAe1F;AAED,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAOlE;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,sBAAsB,CAmF5G;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAuH/F;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG;IAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CA6C9H;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -129,11 +129,23 @@ function buildParallelRunPlan(projectPath, maxClonesOverride) {
|
|
|
129
129
|
GROUP BY section_id`)
|
|
130
130
|
.all(...sections.map((section) => section.id));
|
|
131
131
|
const pendingMap = new Map(pendingRows.map((row) => [row.sectionId, row.count]));
|
|
132
|
-
// Each section with pending work gets its own workstream.
|
|
133
|
-
//
|
|
134
|
-
//
|
|
132
|
+
// Each section with pending work AND met dependencies gets its own workstream.
|
|
133
|
+
// Sections whose upstream dependencies aren't all completed are excluded so they
|
|
134
|
+
// don't burn a workstream slot (and immediately exit with no tasks), pushing
|
|
135
|
+
// unlocked sections like Frontend Scaffolding beyond the maxClones cutoff.
|
|
135
136
|
const sectionsWithWork = sections
|
|
136
|
-
.filter((s) =>
|
|
137
|
+
.filter((s) => {
|
|
138
|
+
if ((pendingMap.get(s.id) ?? 0) === 0)
|
|
139
|
+
return false;
|
|
140
|
+
try {
|
|
141
|
+
return (0, queries_js_1.hasDependenciesMet)(db, s.id);
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// If dependency check fails, include the section — runner's task selector
|
|
145
|
+
// will enforce dependencies at runtime anyway.
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
})
|
|
137
149
|
.sort((a, b) => (a.position ?? 0) - (b.position ?? 0));
|
|
138
150
|
const activeWorkstreams = sectionsWithWork.map((section, index) => ({
|
|
139
151
|
id: `ws-${shortSessionId}-${index + 1}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runners-parallel.js","sourceRoot":"","sources":["../../src/commands/runners-parallel.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCA,0CAKC;AAyBD,8CAeC;AAED,wDAOC;AAED,
|
|
1
|
+
{"version":3,"file":"runners-parallel.js","sourceRoot":"","sources":["../../src/commands/runners-parallel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Commit integration checks and SHA resolution
|
|
3
|
+
*/
|
|
4
|
+
export declare function isAppliedCommitIntegrated(projectPath: string, commitSha: string | null): boolean;
|
|
5
|
+
export declare function resolveGitSha(output: string): string | null;
|
|
6
|
+
//# sourceMappingURL=merge-commit-checks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-commit-checks.d.ts","sourceRoot":"","sources":["../../src/parallel/merge-commit-checks.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAiBhG;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK3D"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Commit integration checks and SHA resolution
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.isAppliedCommitIntegrated = isAppliedCommitIntegrated;
|
|
7
|
+
exports.resolveGitSha = resolveGitSha;
|
|
8
|
+
const merge_git_js_1 = require("./merge-git.js");
|
|
9
|
+
function isAppliedCommitIntegrated(projectPath, commitSha) {
|
|
10
|
+
if (!commitSha) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
const output = (0, merge_git_js_1.runGitCommand)(projectPath, ['branch', '--contains', commitSha, '--list', 'HEAD'], { allowFailure: true });
|
|
14
|
+
const lower = output.toLowerCase();
|
|
15
|
+
if (lower.includes('fatal:') || lower.includes('error:')) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
return output.trim().length > 0;
|
|
19
|
+
}
|
|
20
|
+
function resolveGitSha(output) {
|
|
21
|
+
const trimmed = output.trim();
|
|
22
|
+
if (!trimmed)
|
|
23
|
+
return null;
|
|
24
|
+
if (/fatal:|error:/i.test(trimmed))
|
|
25
|
+
return null;
|
|
26
|
+
return trimmed.split('\n').at(-1)?.trim() ?? null;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=merge-commit-checks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-commit-checks.js","sourceRoot":"","sources":["../../src/parallel/merge-commit-checks.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAIH,8DAiBC;AAED,sCAKC;AA1BD,iDAA+C;AAE/C,SAAgB,yBAAyB,CAAC,WAAmB,EAAE,SAAwB;IACrF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,4BAAa,EAC1B,WAAW,EACX,CAAC,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,EACrD,EAAE,YAAY,EAAE,IAAI,EAAE,CACvB,CAAC;IACF,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAEnC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,SAAgB,aAAa,CAAC,MAAc;IAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-workstream commit processing
|
|
3
|
+
*/
|
|
4
|
+
import { MergeProgressRow } from './merge-progress.js';
|
|
5
|
+
import { openDatabase } from '../database/connection.js';
|
|
6
|
+
interface MergeWorkstreamSpec {
|
|
7
|
+
id: string;
|
|
8
|
+
branchName: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function processWorkstream(db: ReturnType<typeof openDatabase>['db'], projectPath: string, sessionId: string, workstream: MergeWorkstreamSpec, mainBranch: string, remote: string, progressRows: MergeProgressRow[], heartbeat: {
|
|
11
|
+
sessionId: string;
|
|
12
|
+
runnerId: string;
|
|
13
|
+
timeoutMinutes: number;
|
|
14
|
+
lockEpoch: number;
|
|
15
|
+
}): Promise<{
|
|
16
|
+
applied: number;
|
|
17
|
+
skipped: number;
|
|
18
|
+
conflicts: number;
|
|
19
|
+
}>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=merge-process.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-process.d.ts","sourceRoot":"","sources":["../../src/parallel/merge-process.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,EAIL,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,UAAU,mBAAmB;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,IAAI,CAAC,EACzC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,mBAAmB,EAC/B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,gBAAgB,EAAE,EAChC,SAAS,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC5F,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAsHlE"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Per-workstream commit processing
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.processWorkstream = processWorkstream;
|
|
7
|
+
const merge_git_js_1 = require("./merge-git.js");
|
|
8
|
+
const merge_progress_js_1 = require("./merge-progress.js");
|
|
9
|
+
const merge_conflict_js_1 = require("./merge-conflict.js");
|
|
10
|
+
const merge_commit_checks_js_1 = require("./merge-commit-checks.js");
|
|
11
|
+
const merge_lock_js_1 = require("./merge-lock.js");
|
|
12
|
+
async function processWorkstream(db, projectPath, sessionId, workstream, mainBranch, remote, progressRows, heartbeat) {
|
|
13
|
+
const summary = { applied: 0, skipped: 0, conflicts: 0 };
|
|
14
|
+
const commits = (0, merge_git_js_1.getWorkstreamCommitList)(projectPath, remote, workstream.branchName, mainBranch);
|
|
15
|
+
if (commits.length === 0) {
|
|
16
|
+
return summary;
|
|
17
|
+
}
|
|
18
|
+
const workstreamProgress = (0, merge_progress_js_1.getMergeProgressForWorkstream)(progressRows, workstream.id);
|
|
19
|
+
const workstreamLookup = new Map();
|
|
20
|
+
for (const row of workstreamProgress) {
|
|
21
|
+
workstreamLookup.set(row.position, row);
|
|
22
|
+
}
|
|
23
|
+
for (let position = 0; position < commits.length; position += 1) {
|
|
24
|
+
const commitSha = commits[position];
|
|
25
|
+
const shortSha = (0, merge_git_js_1.getCommitShortSha)(commitSha);
|
|
26
|
+
const prior = workstreamLookup.get(position);
|
|
27
|
+
if (prior?.status === 'applied' && prior.commit_sha === commitSha) {
|
|
28
|
+
if ((0, merge_commit_checks_js_1.isAppliedCommitIntegrated)(projectPath, prior.applied_commit_sha)) {
|
|
29
|
+
summary.applied += 1;
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
(0, merge_progress_js_1.clearProgressEntry)(db, sessionId, workstream.id, position);
|
|
33
|
+
}
|
|
34
|
+
if (prior?.status === 'skipped' && prior.commit_sha === commitSha) {
|
|
35
|
+
summary.skipped += 1;
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (prior?.status === 'conflict' && prior.commit_sha === commitSha) {
|
|
39
|
+
if ((0, merge_git_js_1.hasCherryPickInProgress)(projectPath)) {
|
|
40
|
+
const outcome = await (0, merge_conflict_js_1.runConflictResolutionCycle)({
|
|
41
|
+
db,
|
|
42
|
+
projectPath,
|
|
43
|
+
sessionId,
|
|
44
|
+
workstreamId: workstream.id,
|
|
45
|
+
runnerId: heartbeat.runnerId,
|
|
46
|
+
mergeLockHeartbeat: {
|
|
47
|
+
lockEpoch: heartbeat.lockEpoch,
|
|
48
|
+
timeoutMinutes: heartbeat.timeoutMinutes,
|
|
49
|
+
},
|
|
50
|
+
branchName: workstream.branchName,
|
|
51
|
+
position,
|
|
52
|
+
commitSha,
|
|
53
|
+
existingTaskId: prior.conflict_task_id ?? undefined,
|
|
54
|
+
});
|
|
55
|
+
if (outcome === 'skipped')
|
|
56
|
+
summary.skipped += 1;
|
|
57
|
+
else
|
|
58
|
+
summary.applied += 1;
|
|
59
|
+
summary.conflicts += 1;
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
(0, merge_progress_js_1.clearProgressEntry)(db, sessionId, workstream.id, position);
|
|
63
|
+
}
|
|
64
|
+
if (prior && prior.commit_sha !== commitSha) {
|
|
65
|
+
(0, merge_progress_js_1.clearProgressEntry)(db, sessionId, workstream.id, position);
|
|
66
|
+
}
|
|
67
|
+
try {
|
|
68
|
+
(0, merge_git_js_1.runGitCommand)(projectPath, ['cherry-pick', commitSha]);
|
|
69
|
+
const appliedCommitSha = (0, merge_git_js_1.runGitCommand)(projectPath, ['rev-parse', 'HEAD']).trim();
|
|
70
|
+
(0, merge_progress_js_1.upsertProgressEntry)(db, sessionId, workstream.id, position, commitSha, 'applied', null, appliedCommitSha);
|
|
71
|
+
summary.applied += 1;
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
75
|
+
if (!/CONFLICT|merge conflict|could not apply|needs merge/i.test(message)) {
|
|
76
|
+
throw error;
|
|
77
|
+
}
|
|
78
|
+
const outcome = await (0, merge_conflict_js_1.runConflictResolutionCycle)({
|
|
79
|
+
db,
|
|
80
|
+
projectPath,
|
|
81
|
+
sessionId,
|
|
82
|
+
workstreamId: workstream.id,
|
|
83
|
+
runnerId: heartbeat.runnerId,
|
|
84
|
+
mergeLockHeartbeat: {
|
|
85
|
+
lockEpoch: heartbeat.lockEpoch,
|
|
86
|
+
timeoutMinutes: heartbeat.timeoutMinutes,
|
|
87
|
+
},
|
|
88
|
+
branchName: workstream.branchName,
|
|
89
|
+
position,
|
|
90
|
+
commitSha,
|
|
91
|
+
});
|
|
92
|
+
if (outcome === 'skipped') {
|
|
93
|
+
summary.skipped += 1;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
summary.applied += 1;
|
|
97
|
+
}
|
|
98
|
+
summary.conflicts += 1;
|
|
99
|
+
}
|
|
100
|
+
(0, merge_lock_js_1.refreshMergeLock)(db, heartbeat.sessionId, heartbeat.runnerId, heartbeat.timeoutMinutes, heartbeat.lockEpoch);
|
|
101
|
+
}
|
|
102
|
+
return summary;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=merge-process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-process.js","sourceRoot":"","sources":["../../src/parallel/merge-process.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workstream sealing before cherry-pick merge
|
|
3
|
+
*/
|
|
4
|
+
import { openDatabase } from '../database/connection.js';
|
|
5
|
+
interface MergeWorkstreamSpec {
|
|
6
|
+
id: string;
|
|
7
|
+
branchName: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function sealWorkstreamsForMerge(mergeDb: ReturnType<typeof openDatabase>['db'], sessionId: string, runnerId: string, lockEpoch: number, mergePath: string, remote: string, mainBranch: string, workstreams: MergeWorkstreamSpec[]): void;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=merge-sealing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-sealing.d.ts","sourceRoot":"","sources":["../../src/parallel/merge-sealing.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAIzD,UAAU,mBAAmB;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;CACpB;AASD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,IAAI,CAAC,EAC9C,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,mBAAmB,EAAE,GACjC,IAAI,CA2EN"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Workstream sealing before cherry-pick merge
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.sealWorkstreamsForMerge = sealWorkstreamsForMerge;
|
|
7
|
+
const merge_git_js_1 = require("./merge-git.js");
|
|
8
|
+
const merge_lock_js_1 = require("./merge-lock.js");
|
|
9
|
+
const global_db_js_1 = require("../runners/global-db.js");
|
|
10
|
+
const merge_errors_js_1 = require("./merge-errors.js");
|
|
11
|
+
function resolveGitSha(output) {
|
|
12
|
+
const trimmed = output.trim();
|
|
13
|
+
if (!trimmed)
|
|
14
|
+
return null;
|
|
15
|
+
if (/fatal:|error:/i.test(trimmed))
|
|
16
|
+
return null;
|
|
17
|
+
return trimmed.split('\n').at(-1)?.trim() ?? null;
|
|
18
|
+
}
|
|
19
|
+
function sealWorkstreamsForMerge(mergeDb, sessionId, runnerId, lockEpoch, mergePath, remote, mainBranch, workstreams) {
|
|
20
|
+
const { db, close } = (0, global_db_js_1.openGlobalDatabase)();
|
|
21
|
+
try {
|
|
22
|
+
const sealedEntries = [];
|
|
23
|
+
(0, merge_lock_js_1.assertMergeLockEpoch)(mergeDb, sessionId, runnerId, lockEpoch);
|
|
24
|
+
for (let index = 0; index < workstreams.length; index += 1) {
|
|
25
|
+
(0, merge_lock_js_1.assertMergeLockEpoch)(mergeDb, sessionId, runnerId, lockEpoch);
|
|
26
|
+
const stream = workstreams[index];
|
|
27
|
+
const commits = (0, merge_git_js_1.getWorkstreamCommitList)(mergePath, remote, stream.branchName, mainBranch);
|
|
28
|
+
const sealedHeadSha = resolveGitSha((0, merge_git_js_1.runGitCommand)(mergePath, ['rev-parse', `${remote}/${stream.branchName}`], { allowFailure: true }));
|
|
29
|
+
const sealedBaseSha = resolveGitSha((0, merge_git_js_1.runGitCommand)(mergePath, ['merge-base', `${remote}/${mainBranch}`, `${remote}/${stream.branchName}`], { allowFailure: true }));
|
|
30
|
+
if (!sealedHeadSha || !sealedBaseSha) {
|
|
31
|
+
throw new merge_errors_js_1.ParallelMergeError(`Could not resolve sealed merge SHAs for ${remote}/${stream.branchName}`, 'REMOTE_BRANCH_MISSING');
|
|
32
|
+
}
|
|
33
|
+
sealedEntries.push({
|
|
34
|
+
streamId: stream.id,
|
|
35
|
+
sealedBaseSha,
|
|
36
|
+
sealedHeadSha,
|
|
37
|
+
commits,
|
|
38
|
+
completionOrder: index + 1,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
const applySealedUpdates = db.transaction(() => {
|
|
42
|
+
for (const entry of sealedEntries) {
|
|
43
|
+
const update = db.prepare(`UPDATE workstreams
|
|
44
|
+
SET sealed_base_sha = ?,
|
|
45
|
+
sealed_head_sha = ?,
|
|
46
|
+
sealed_commit_shas = ?,
|
|
47
|
+
completion_order = COALESCE(completion_order, ?),
|
|
48
|
+
completed_at = COALESCE(completed_at, datetime('now')),
|
|
49
|
+
status = 'completed'
|
|
50
|
+
WHERE session_id = ?
|
|
51
|
+
AND id = ?
|
|
52
|
+
AND status IN ('running', 'completed')`).run(entry.sealedBaseSha, entry.sealedHeadSha, JSON.stringify(entry.commits), entry.completionOrder, sessionId, entry.streamId);
|
|
53
|
+
if (update.changes !== 1) {
|
|
54
|
+
throw new merge_errors_js_1.ParallelMergeError(`Workstream lease check failed while sealing ${entry.streamId}`, 'LEASE_FENCE_FAILED');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
applySealedUpdates();
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
close();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=merge-sealing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-sealing.js","sourceRoot":"","sources":["../../src/parallel/merge-sealing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merge validation gate and workspace utilities
|
|
3
|
+
*/
|
|
4
|
+
export declare function runValidationGate(mergePath: string, validationCommand?: string): void;
|
|
5
|
+
export declare function snippet(value: string | null | undefined, limit?: number): string;
|
|
6
|
+
//# sourceMappingURL=merge-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-validation.d.ts","sourceRoot":"","sources":["../../src/parallel/merge-validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CA2CrF;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,SAA2B,GAAG,MAAM,CAWlG"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Merge validation gate and workspace utilities
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.runValidationGate = runValidationGate;
|
|
7
|
+
exports.snippet = snippet;
|
|
8
|
+
const node_child_process_1 = require("node:child_process");
|
|
9
|
+
const merge_errors_js_1 = require("./merge-errors.js");
|
|
10
|
+
const VALIDATION_MAX_BUFFER_BYTES = 20 * 1024 * 1024;
|
|
11
|
+
const VALIDATION_SNIPPET_LIMIT = 8_000;
|
|
12
|
+
function runValidationGate(mergePath, validationCommand) {
|
|
13
|
+
if (!validationCommand || validationCommand.trim().length === 0) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
(0, node_child_process_1.execSync)(validationCommand, {
|
|
18
|
+
cwd: mergePath,
|
|
19
|
+
stdio: 'pipe',
|
|
20
|
+
encoding: 'utf-8',
|
|
21
|
+
maxBuffer: VALIDATION_MAX_BUFFER_BYTES,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
const err = error;
|
|
26
|
+
const stderr = typeof err.stderr === 'string' ? err.stderr : err.stderr?.toString() ?? '';
|
|
27
|
+
const stdout = typeof err.stdout === 'string' ? err.stdout : err.stdout?.toString() ?? '';
|
|
28
|
+
if (err.code === 'ENOBUFS') {
|
|
29
|
+
throw new merge_errors_js_1.ParallelMergeError('Validation gate output exceeded the maximum buffer size. Reduce output verbosity or split the command.', 'VALIDATION_FAILED', {
|
|
30
|
+
details: {
|
|
31
|
+
command: validationCommand.trim(),
|
|
32
|
+
stderr: stderr ?? '',
|
|
33
|
+
stdout: stdout ?? '',
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
const message = [stderr, stdout, err.message].filter(Boolean).join('\n') || String(error);
|
|
38
|
+
throw new merge_errors_js_1.ParallelMergeError(`Validation gate failed: ${message}`, 'VALIDATION_FAILED', {
|
|
39
|
+
details: {
|
|
40
|
+
command: validationCommand.trim(),
|
|
41
|
+
stderr,
|
|
42
|
+
stdout,
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function snippet(value, limit = VALIDATION_SNIPPET_LIMIT) {
|
|
48
|
+
if (!value) {
|
|
49
|
+
return '';
|
|
50
|
+
}
|
|
51
|
+
const trimmed = value.trim();
|
|
52
|
+
if (trimmed.length <= limit) {
|
|
53
|
+
return trimmed;
|
|
54
|
+
}
|
|
55
|
+
return trimmed.slice(-limit);
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=merge-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-validation.js","sourceRoot":"","sources":["../../src/parallel/merge-validation.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAQH,8CA2CC;AAED,0BAWC;AA9DD,2DAA8C;AAC9C,uDAAuD;AAEvD,MAAM,2BAA2B,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AACrD,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAEvC,SAAgB,iBAAiB,CAAC,SAAiB,EAAE,iBAA0B;IAC7E,IAAI,CAAC,iBAAiB,IAAI,iBAAiB,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,IAAA,6BAAQ,EAAC,iBAAiB,EAAE;YAC1B,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,OAAO;YACjB,SAAS,EAAE,2BAA2B;SACvC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,KAAsF,CAAC;QACnG,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC1F,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC1F,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,oCAAkB,CAC1B,wGAAwG,EACxG,mBAAmB,EACnB;gBACE,OAAO,EAAE;oBACP,OAAO,EAAE,iBAAiB,CAAC,IAAI,EAAE;oBACjC,MAAM,EAAE,MAAM,IAAI,EAAE;oBACpB,MAAM,EAAE,MAAM,IAAI,EAAE;iBACrB;aACF,CACF,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1F,MAAM,IAAI,oCAAkB,CAC1B,2BAA2B,OAAO,EAAE,EACpC,mBAAmB,EACnB;YACE,OAAO,EAAE;gBACP,OAAO,EAAE,iBAAiB,CAAC,IAAI,EAAE;gBACjC,MAAM;gBACN,MAAM;aACP;SACF,CACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAgB,OAAO,CAAC,KAAgC,EAAE,KAAK,GAAG,wBAAwB;IACxF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merge workspace preparation and cleanup
|
|
3
|
+
*/
|
|
4
|
+
export declare function ensureMergeWorkingTree(projectPath: string): void;
|
|
5
|
+
export declare function cleanupWorkspaceState(projectPath: string, workspaceRoot: string, workstreamIds: string[], options: {
|
|
6
|
+
cleanupOnSuccess: boolean;
|
|
7
|
+
}): void;
|
|
8
|
+
//# sourceMappingURL=merge-workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-workspace.d.ts","sourceRoot":"","sources":["../../src/parallel/merge-workspace.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAUhE;AAED,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EAAE,EACvB,OAAO,EAAE;IAAE,gBAAgB,EAAE,OAAO,CAAA;CAAE,GACrC,IAAI,CAqBN"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Merge workspace preparation and cleanup
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ensureMergeWorkingTree = ensureMergeWorkingTree;
|
|
7
|
+
exports.cleanupWorkspaceState = cleanupWorkspaceState;
|
|
8
|
+
const node_path_1 = require("node:path");
|
|
9
|
+
const node_fs_1 = require("node:fs");
|
|
10
|
+
const clone_js_1 = require("./clone.js");
|
|
11
|
+
const merge_git_js_1 = require("./merge-git.js");
|
|
12
|
+
const merge_errors_js_1 = require("./merge-errors.js");
|
|
13
|
+
function ensureMergeWorkingTree(projectPath) {
|
|
14
|
+
const lines = (0, merge_git_js_1.gitStatusLines)(projectPath);
|
|
15
|
+
if (lines.length === 0)
|
|
16
|
+
return;
|
|
17
|
+
if (!(0, merge_git_js_1.hasCherryPickInProgress)(projectPath)) {
|
|
18
|
+
throw new merge_errors_js_1.ParallelMergeError('Working tree is dirty. Commit or stash changes before merging.', 'DIRTY_WORKTREE');
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function cleanupWorkspaceState(projectPath, workspaceRoot, workstreamIds, options) {
|
|
22
|
+
if (!options.cleanupOnSuccess)
|
|
23
|
+
return;
|
|
24
|
+
const baseRoot = (0, node_path_1.resolve)(workspaceRoot);
|
|
25
|
+
const hash = (0, clone_js_1.getProjectHash)(projectPath);
|
|
26
|
+
const projectWorkspaceRoot = (0, node_path_1.resolve)(baseRoot, hash);
|
|
27
|
+
if (!projectWorkspaceRoot.startsWith(baseRoot)) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
for (const workstreamId of workstreamIds) {
|
|
31
|
+
const folder = (0, node_path_1.resolve)(projectWorkspaceRoot, workstreamId.startsWith('ws-') ? workstreamId : `ws-${workstreamId}`);
|
|
32
|
+
if ((0, node_path_1.resolve)(folder).startsWith(projectWorkspaceRoot)) {
|
|
33
|
+
(0, node_fs_1.rmSync)(folder, { recursive: true, force: true });
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=merge-workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-workspace.js","sourceRoot":"","sources":["../../src/parallel/merge-workspace.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAQH,wDAUC;AAED,sDA0BC;AA5CD,yCAAoC;AACpC,qCAAiC;AACjC,yCAA4C;AAC5C,iDAAyE;AACzE,uDAAuD;AAEvD,SAAgB,sBAAsB,CAAC,WAAmB;IACxD,MAAM,KAAK,GAAG,IAAA,6BAAc,EAAC,WAAW,CAAC,CAAC;IAC1C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAE/B,IAAI,CAAC,IAAA,sCAAuB,EAAC,WAAW,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,oCAAkB,CAC1B,gEAAgE,EAChE,gBAAgB,CACjB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAgB,qBAAqB,CACnC,WAAmB,EACnB,aAAqB,EACrB,aAAuB,EACvB,OAAsC;IAEtC,IAAI,CAAC,OAAO,CAAC,gBAAgB;QAAE,OAAO;IAEtC,MAAM,QAAQ,GAAG,IAAA,mBAAO,EAAC,aAAa,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,IAAA,yBAAc,EAAC,WAAW,CAAC,CAAC;IACzC,MAAM,oBAAoB,GAAG,IAAA,mBAAO,EAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAErD,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,IAAA,mBAAO,EACpB,oBAAoB,EACpB,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,YAAY,EAAE,CACrE,CAAC;QAEF,IAAI,IAAA,mBAAO,EAAC,MAAM,CAAC,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACrD,IAAA,gBAAM,EAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/parallel/merge.d.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { MergeLockRecord } from './merge-lock.js';
|
|
6
6
|
import { ParallelMergeError } from './merge-errors.js';
|
|
7
|
+
import { cleanupWorkspaceState } from './merge-workspace.js';
|
|
7
8
|
export interface MergeWorkstreamSpec {
|
|
8
9
|
id: string;
|
|
9
10
|
branchName: string;
|
|
@@ -21,6 +22,14 @@ export interface MergeOptions {
|
|
|
21
22
|
cleanupOnSuccess?: boolean;
|
|
22
23
|
integrationBranchName?: string;
|
|
23
24
|
validationCommand?: string;
|
|
25
|
+
/**
|
|
26
|
+
* When true, do NOT mark the session as 'completed' after merging this
|
|
27
|
+
* workstream. The caller is responsible for checking whether all workstreams
|
|
28
|
+
* are done and marking the session complete. Used by autoMergeOnCompletion
|
|
29
|
+
* so that a single fast workstream finishing doesn't mark the whole session
|
|
30
|
+
* complete while other workstreams are still running.
|
|
31
|
+
*/
|
|
32
|
+
skipSessionComplete?: boolean;
|
|
24
33
|
}
|
|
25
34
|
export interface MergeResult {
|
|
26
35
|
success: boolean;
|
|
@@ -31,13 +40,9 @@ export interface MergeResult {
|
|
|
31
40
|
validationEscalationId?: string;
|
|
32
41
|
validationWorkspacePath?: string;
|
|
33
42
|
}
|
|
34
|
-
declare function getNowISOString(): string;
|
|
35
|
-
declare function cleanupWorkspaceState(projectPath: string, workspaceRoot: string, workstreamIds: string[], options: {
|
|
36
|
-
cleanupOnSuccess: boolean;
|
|
37
|
-
}): void;
|
|
38
43
|
/**
|
|
39
44
|
* Run cherry-pick merge loop across completed workstreams.
|
|
40
45
|
*/
|
|
41
46
|
export declare function runParallelMerge(options: MergeOptions): Promise<MergeResult>;
|
|
42
|
-
export { MergeLockRecord, ParallelMergeError,
|
|
47
|
+
export { MergeLockRecord, ParallelMergeError, cleanupWorkspaceState, };
|
|
43
48
|
//# sourceMappingURL=merge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/parallel/merge.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/parallel/merge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkBH,OAAO,EACL,eAAe,EAKhB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAA0B,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAIrF,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAOD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAgOlF;AAED,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,qBAAqB,GACtB,CAAC"}
|