@fern-api/replay 0.1.0 → 0.3.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/dist/FernignoreMigrator.d.ts +1 -7
- package/dist/FernignoreMigrator.d.ts.map +1 -1
- package/dist/FernignoreMigrator.js +1 -7
- package/dist/FernignoreMigrator.js.map +1 -1
- package/dist/LockfileManager.d.ts +4 -0
- package/dist/LockfileManager.d.ts.map +1 -1
- package/dist/LockfileManager.js +16 -0
- package/dist/LockfileManager.js.map +1 -1
- package/dist/ReplayApplicator.d.ts +3 -15
- package/dist/ReplayApplicator.d.ts.map +1 -1
- package/dist/ReplayApplicator.js +6 -25
- package/dist/ReplayApplicator.js.map +1 -1
- package/dist/ReplayDetector.d.ts +2 -0
- package/dist/ReplayDetector.d.ts.map +1 -1
- package/dist/ReplayDetector.js +40 -0
- package/dist/ReplayDetector.js.map +1 -1
- package/dist/ReplayService.d.ts +25 -28
- package/dist/ReplayService.d.ts.map +1 -1
- package/dist/ReplayService.js +186 -156
- package/dist/ReplayService.js.map +1 -1
- package/dist/cli.js +9 -31
- package/dist/cli.js.map +1 -1
- package/dist/commands/bootstrap.js +2 -16
- package/dist/commands/bootstrap.js.map +1 -1
- package/dist/git/CommitDetection.d.ts +1 -7
- package/dist/git/CommitDetection.d.ts.map +1 -1
- package/dist/git/CommitDetection.js +2 -10
- package/dist/git/CommitDetection.js.map +1 -1
- package/dist/git/GitClient.d.ts +5 -0
- package/dist/git/GitClient.d.ts.map +1 -1
- package/dist/git/GitClient.js +14 -0
- package/dist/git/GitClient.js.map +1 -1
- package/dist/index.d.ts +1 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -4
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +1 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -7
- package/dist/types.js.map +1 -1
- package/package.json +43 -43
- package/dist/ConflictPrompt.d.ts +0 -13
- package/dist/ConflictPrompt.d.ts.map +0 -1
- package/dist/ConflictPrompt.js +0 -38
- package/dist/ConflictPrompt.js.map +0 -1
- package/dist/ConflictResolver.d.ts +0 -11
- package/dist/ConflictResolver.d.ts.map +0 -1
- package/dist/ConflictResolver.js +0 -53
- package/dist/ConflictResolver.js.map +0 -1
- package/dist/environment.d.ts +0 -5
- package/dist/environment.d.ts.map +0 -1
- package/dist/environment.js +0 -14
- package/dist/environment.js.map +0 -1
package/dist/ReplayService.js
CHANGED
|
@@ -6,29 +6,16 @@ import { LockfileManager } from "./LockfileManager.js";
|
|
|
6
6
|
import { ReplayDetector } from "./ReplayDetector.js";
|
|
7
7
|
import { ReplayApplicator } from "./ReplayApplicator.js";
|
|
8
8
|
import { ReplayCommitter } from "./ReplayCommitter.js";
|
|
9
|
-
import { resolveConflictMarkers } from "./ConflictResolver.js";
|
|
10
|
-
import { promptForConflictResolution } from "./ConflictPrompt.js";
|
|
11
|
-
import { isCI } from "./environment.js";
|
|
12
|
-
export class ReplayConflictError extends Error {
|
|
13
|
-
report;
|
|
14
|
-
constructor(report) {
|
|
15
|
-
super(`Replay produced ${report.patchesWithConflicts} patch conflict(s)`);
|
|
16
|
-
this.name = "ReplayConflictError";
|
|
17
|
-
this.report = report;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
9
|
export class ReplayService {
|
|
21
10
|
git;
|
|
22
|
-
config;
|
|
23
11
|
detector;
|
|
24
12
|
applicator;
|
|
25
13
|
committer;
|
|
26
14
|
lockManager;
|
|
27
15
|
outputDir;
|
|
28
|
-
constructor(outputDir,
|
|
16
|
+
constructor(outputDir, _config) {
|
|
29
17
|
const git = new GitClient(outputDir);
|
|
30
18
|
this.git = git;
|
|
31
|
-
this.config = config;
|
|
32
19
|
this.outputDir = outputDir;
|
|
33
20
|
this.lockManager = new LockfileManager(outputDir);
|
|
34
21
|
this.detector = new ReplayDetector(git, this.lockManager, outputDir);
|
|
@@ -39,6 +26,9 @@ export class ReplayService {
|
|
|
39
26
|
* Run the full replay flow.
|
|
40
27
|
*/
|
|
41
28
|
async runReplay(options) {
|
|
29
|
+
if (options?.skipApplication) {
|
|
30
|
+
return this.handleSkipApplication(options);
|
|
31
|
+
}
|
|
42
32
|
const flow = this.determineFlow();
|
|
43
33
|
switch (flow) {
|
|
44
34
|
case "first-generation":
|
|
@@ -49,6 +39,30 @@ export class ReplayService {
|
|
|
49
39
|
return this.handleNormalRegeneration(options);
|
|
50
40
|
}
|
|
51
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Sync the lockfile after a divergent PR was squash-merged.
|
|
44
|
+
* Call this BEFORE runReplay() when the CLI detects a merged divergent PR.
|
|
45
|
+
*/
|
|
46
|
+
async syncFromDivergentMerge(generationCommitSha, options) {
|
|
47
|
+
const treeHash = await this.git.getTreeHash(generationCommitSha);
|
|
48
|
+
const timestamp = (await this.git.exec(["log", "-1", "--format=%aI", generationCommitSha])).trim();
|
|
49
|
+
const record = {
|
|
50
|
+
commit_sha: generationCommitSha,
|
|
51
|
+
tree_hash: treeHash,
|
|
52
|
+
timestamp,
|
|
53
|
+
cli_version: options?.cliVersion ?? "unknown",
|
|
54
|
+
generator_versions: options?.generatorVersions ?? {},
|
|
55
|
+
};
|
|
56
|
+
if (!this.lockManager.exists()) {
|
|
57
|
+
this.lockManager.initializeInMemory(record);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
this.lockManager.read();
|
|
61
|
+
this.lockManager.addGeneration(record);
|
|
62
|
+
this.lockManager.clearPatches();
|
|
63
|
+
}
|
|
64
|
+
this.lockManager.save();
|
|
65
|
+
}
|
|
52
66
|
/**
|
|
53
67
|
* Determine which flow to use based on lockfile state.
|
|
54
68
|
*/
|
|
@@ -92,6 +106,45 @@ export class ReplayService {
|
|
|
92
106
|
conflicts: [],
|
|
93
107
|
};
|
|
94
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* Skip-application mode: commit the generation and update the lockfile
|
|
111
|
+
* but don't detect or apply patches. Sets a marker so the next normal
|
|
112
|
+
* run skips revert detection in preGenerationRebase().
|
|
113
|
+
*/
|
|
114
|
+
async handleSkipApplication(options) {
|
|
115
|
+
const commitOpts = options ? {
|
|
116
|
+
cliVersion: options.cliVersion ?? "unknown",
|
|
117
|
+
generatorVersions: options.generatorVersions ?? {},
|
|
118
|
+
} : undefined;
|
|
119
|
+
await this.committer.commitGeneration("Update SDK (replay skipped)", commitOpts);
|
|
120
|
+
const genRecord = await this.committer.createGenerationRecord(commitOpts);
|
|
121
|
+
if (this.lockManager.exists()) {
|
|
122
|
+
this.lockManager.read();
|
|
123
|
+
this.lockManager.addGeneration(genRecord);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
this.lockManager.initializeInMemory(genRecord);
|
|
127
|
+
}
|
|
128
|
+
this.lockManager.setReplaySkippedAt(new Date().toISOString());
|
|
129
|
+
this.lockManager.save();
|
|
130
|
+
// Commit the lockfile update so it's pushed with the branch.
|
|
131
|
+
// Without this, the marker and generation record stay in the
|
|
132
|
+
// working tree and are lost when GithubStep pushes.
|
|
133
|
+
if (!options?.stageOnly) {
|
|
134
|
+
await this.committer.commitReplay(0);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
await this.committer.stageAll();
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
flow: "skip-application",
|
|
141
|
+
patchesDetected: 0,
|
|
142
|
+
patchesApplied: 0,
|
|
143
|
+
patchesWithConflicts: 0,
|
|
144
|
+
patchesSkipped: 0,
|
|
145
|
+
conflicts: [],
|
|
146
|
+
};
|
|
147
|
+
}
|
|
95
148
|
/**
|
|
96
149
|
* No existing patches - detect new ones and apply if any.
|
|
97
150
|
*/
|
|
@@ -120,10 +173,6 @@ export class ReplayService {
|
|
|
120
173
|
if (newPatches.length > 0) {
|
|
121
174
|
results = await this.applicator.applyPatches(newPatches);
|
|
122
175
|
}
|
|
123
|
-
// Phase 1: Resolve conflict markers on disk BEFORE rebasing.
|
|
124
|
-
// This ensures rebasePatches() captures clean file content, not
|
|
125
|
-
// content with conflict markers baked in.
|
|
126
|
-
await this.resolveConflictsOnDisk(results, newPatches, "no-patches", options, warnings);
|
|
127
176
|
// Rebase cleanly applied patches to the current generation.
|
|
128
177
|
// This prevents recurring conflicts on subsequent regenerations.
|
|
129
178
|
const rebaseCounts = await this.rebasePatches(results, genRecord.commit_sha);
|
|
@@ -135,9 +184,6 @@ export class ReplayService {
|
|
|
135
184
|
}
|
|
136
185
|
}
|
|
137
186
|
this.lockManager.save();
|
|
138
|
-
// Phase 2: For "fail" policy, throw AFTER lockfile save so patches
|
|
139
|
-
// aren't lost, but BEFORE replay commit so broken code isn't committed.
|
|
140
|
-
this.enforceConflictFailPolicy(results, newPatches, "no-patches", options, warnings, rebaseCounts);
|
|
141
187
|
if (newPatches.length > 0) {
|
|
142
188
|
if (!options?.stageOnly) {
|
|
143
189
|
const appliedCount = results.filter((r) => r.status === "applied" || r.status === "conflict").length;
|
|
@@ -155,11 +201,11 @@ export class ReplayService {
|
|
|
155
201
|
* Normal flow - apply existing patches + detect new ones.
|
|
156
202
|
*/
|
|
157
203
|
async handleNormalRegeneration(options) {
|
|
158
|
-
const existingPatches = this.lockManager.getPatches();
|
|
159
|
-
const newPatches = await this.detector.detectNewPatches();
|
|
160
|
-
const warnings = [...this.detector.warnings];
|
|
161
|
-
const allPatches = [...existingPatches, ...newPatches];
|
|
162
204
|
if (options?.dryRun) {
|
|
205
|
+
const existingPatches = this.lockManager.getPatches();
|
|
206
|
+
const newPatches = await this.detector.detectNewPatches();
|
|
207
|
+
const warnings = [...this.detector.warnings];
|
|
208
|
+
const allPatches = [...existingPatches, ...newPatches];
|
|
163
209
|
return {
|
|
164
210
|
flow: "normal-regeneration",
|
|
165
211
|
patchesDetected: allPatches.length,
|
|
@@ -171,6 +217,24 @@ export class ReplayService {
|
|
|
171
217
|
warnings: warnings.length > 0 ? warnings : undefined,
|
|
172
218
|
};
|
|
173
219
|
}
|
|
220
|
+
// Pre-generation rebase: update stale/modified patches while HEAD has customer code.
|
|
221
|
+
let existingPatches = this.lockManager.getPatches();
|
|
222
|
+
const preRebaseCounts = await this.preGenerationRebase(existingPatches);
|
|
223
|
+
// Dedup patches by content hash after pre-generation rebase.
|
|
224
|
+
existingPatches = this.lockManager.getPatches();
|
|
225
|
+
const seenHashes = new Set();
|
|
226
|
+
for (const p of existingPatches) {
|
|
227
|
+
if (seenHashes.has(p.content_hash)) {
|
|
228
|
+
this.lockManager.removePatch(p.id);
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
seenHashes.add(p.content_hash);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
existingPatches = this.lockManager.getPatches();
|
|
235
|
+
const newPatches = await this.detector.detectNewPatches();
|
|
236
|
+
const warnings = [...this.detector.warnings];
|
|
237
|
+
const allPatches = [...existingPatches, ...newPatches];
|
|
174
238
|
const commitOpts = options ? {
|
|
175
239
|
cliVersion: options.cliVersion ?? "unknown",
|
|
176
240
|
generatorVersions: options.generatorVersions ?? {},
|
|
@@ -178,8 +242,6 @@ export class ReplayService {
|
|
|
178
242
|
await this.committer.commitGeneration("Update SDK", commitOpts);
|
|
179
243
|
const genRecord = await this.committer.createGenerationRecord(commitOpts);
|
|
180
244
|
const results = await this.applicator.applyPatches(allPatches);
|
|
181
|
-
// Phase 1: Resolve conflict markers on disk BEFORE rebasing.
|
|
182
|
-
await this.resolveConflictsOnDisk(results, allPatches, "normal-regeneration", options, warnings);
|
|
183
245
|
// Rebase cleanly applied patches to the current generation.
|
|
184
246
|
const rebaseCounts = await this.rebasePatches(results, genRecord.commit_sha);
|
|
185
247
|
// Save lockfile BEFORE commit — lockfile is source of truth.
|
|
@@ -190,8 +252,6 @@ export class ReplayService {
|
|
|
190
252
|
}
|
|
191
253
|
}
|
|
192
254
|
this.lockManager.save();
|
|
193
|
-
// Phase 2: For "fail" policy, throw AFTER lockfile save.
|
|
194
|
-
this.enforceConflictFailPolicy(results, allPatches, "normal-regeneration", options, warnings, rebaseCounts);
|
|
195
255
|
if (options?.stageOnly) {
|
|
196
256
|
await this.committer.stageAll();
|
|
197
257
|
}
|
|
@@ -201,119 +261,7 @@ export class ReplayService {
|
|
|
201
261
|
await this.committer.commitReplay(appliedCount, allPatches);
|
|
202
262
|
}
|
|
203
263
|
}
|
|
204
|
-
return this.buildReport("normal-regeneration", allPatches, results, options, warnings, rebaseCounts);
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Get the active conflict policy based on config and environment.
|
|
208
|
-
* Returns undefined when on_conflict is not configured (backwards-compatible).
|
|
209
|
-
*/
|
|
210
|
-
getConflictPolicy() {
|
|
211
|
-
const onConflict = this.config.on_conflict;
|
|
212
|
-
if (!onConflict)
|
|
213
|
-
return undefined;
|
|
214
|
-
return isCI() ? onConflict.ci : onConflict.local;
|
|
215
|
-
}
|
|
216
|
-
/**
|
|
217
|
-
* Auto-resolve all conflict markers in conflicted files.
|
|
218
|
-
* "ours" = keep generated code, "theirs" = keep user customization.
|
|
219
|
-
*/
|
|
220
|
-
async autoResolveConflicts(results, strategy) {
|
|
221
|
-
const { join } = await import("node:path");
|
|
222
|
-
for (const result of results) {
|
|
223
|
-
if (result.status !== "conflict" || !result.fileResults)
|
|
224
|
-
continue;
|
|
225
|
-
for (const fileResult of result.fileResults) {
|
|
226
|
-
if (fileResult.status !== "conflict")
|
|
227
|
-
continue;
|
|
228
|
-
const filePath = join(this.outputDir, fileResult.file);
|
|
229
|
-
await resolveConflictMarkers(filePath, strategy);
|
|
230
|
-
fileResult.status = "merged";
|
|
231
|
-
fileResult.reason = `auto-resolved (${strategy === "ours" ? "keep-generated" : "keep-mine"})`;
|
|
232
|
-
}
|
|
233
|
-
// If all files resolved, mark the patch as applied
|
|
234
|
-
const allResolved = result.fileResults.every((f) => f.status !== "conflict");
|
|
235
|
-
if (allResolved) {
|
|
236
|
-
result.status = "applied";
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
/**
|
|
241
|
-
* Phase 1: Resolve conflict markers on disk BEFORE rebasing.
|
|
242
|
-
* Handles keep-mine, keep-generated, and prompt policies.
|
|
243
|
-
* Must run before rebasePatches() so rebased content captures clean files.
|
|
244
|
-
*/
|
|
245
|
-
async resolveConflictsOnDisk(results, allPatches, flow, options, warnings) {
|
|
246
|
-
const hasConflicts = results.some((r) => r.status === "conflict");
|
|
247
|
-
if (!hasConflicts)
|
|
248
|
-
return;
|
|
249
|
-
const policy = this.getConflictPolicy();
|
|
250
|
-
if (policy === undefined)
|
|
251
|
-
return; // backwards-compatible: commit with markers
|
|
252
|
-
switch (policy) {
|
|
253
|
-
case "fail":
|
|
254
|
-
// Don't resolve — enforceConflictFailPolicy() handles this after lockfile save
|
|
255
|
-
break;
|
|
256
|
-
case "keep-mine":
|
|
257
|
-
await this.autoResolveConflicts(results, "theirs");
|
|
258
|
-
break;
|
|
259
|
-
case "keep-generated":
|
|
260
|
-
await this.autoResolveConflicts(results, "ours");
|
|
261
|
-
break;
|
|
262
|
-
case "prompt": {
|
|
263
|
-
if (!process.stdin.isTTY)
|
|
264
|
-
break; // No TTY → fall through to default
|
|
265
|
-
const { join } = await import("node:path");
|
|
266
|
-
for (const result of results) {
|
|
267
|
-
if (result.status !== "conflict" || !result.fileResults)
|
|
268
|
-
continue;
|
|
269
|
-
for (const fileResult of result.fileResults) {
|
|
270
|
-
if (fileResult.status !== "conflict")
|
|
271
|
-
continue;
|
|
272
|
-
const answer = await promptForConflictResolution({
|
|
273
|
-
patchId: result.patch.id,
|
|
274
|
-
patchMessage: result.patch.original_message,
|
|
275
|
-
file: fileResult,
|
|
276
|
-
});
|
|
277
|
-
if (answer === "abort") {
|
|
278
|
-
const report = this.buildReport(flow, allPatches, results, options, warnings);
|
|
279
|
-
throw new ReplayConflictError(report);
|
|
280
|
-
}
|
|
281
|
-
if (answer === "ours" || answer === "theirs") {
|
|
282
|
-
const filePath = join(this.outputDir, fileResult.file);
|
|
283
|
-
await resolveConflictMarkers(filePath, answer);
|
|
284
|
-
fileResult.status = "merged";
|
|
285
|
-
fileResult.reason = `resolved (${answer === "ours" ? "keep-generated" : "keep-mine"})`;
|
|
286
|
-
}
|
|
287
|
-
// "manual" → leave conflict markers
|
|
288
|
-
}
|
|
289
|
-
const allResolved = result.fileResults.every((f) => f.status !== "conflict");
|
|
290
|
-
if (allResolved) {
|
|
291
|
-
result.status = "applied";
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
break;
|
|
295
|
-
}
|
|
296
|
-
case "create-pr":
|
|
297
|
-
// Future feature. Fall through with a warning.
|
|
298
|
-
if (warnings) {
|
|
299
|
-
warnings.push("on_conflict: create-pr is not yet implemented; conflict markers left in place");
|
|
300
|
-
}
|
|
301
|
-
break;
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
/**
|
|
305
|
-
* Phase 2: Throw for "fail" policy AFTER lockfile save.
|
|
306
|
-
* This ensures the lockfile is preserved even when we reject the commit.
|
|
307
|
-
*/
|
|
308
|
-
enforceConflictFailPolicy(results, allPatches, flow, options, warnings, rebaseCounts) {
|
|
309
|
-
const hasConflicts = results.some((r) => r.status === "conflict");
|
|
310
|
-
if (!hasConflicts)
|
|
311
|
-
return;
|
|
312
|
-
const policy = this.getConflictPolicy();
|
|
313
|
-
if (policy !== "fail")
|
|
314
|
-
return;
|
|
315
|
-
const report = this.buildReport(flow, allPatches, results, options, warnings, rebaseCounts);
|
|
316
|
-
throw new ReplayConflictError(report);
|
|
264
|
+
return this.buildReport("normal-regeneration", allPatches, results, options, warnings, rebaseCounts, preRebaseCounts);
|
|
317
265
|
}
|
|
318
266
|
/**
|
|
319
267
|
* Rebase cleanly applied patches so they are relative to the current generation.
|
|
@@ -325,9 +273,7 @@ export class ReplayService {
|
|
|
325
273
|
let repointed = 0;
|
|
326
274
|
let contentRebased = 0;
|
|
327
275
|
let keptAsUserOwned = 0;
|
|
328
|
-
// Track content hashes
|
|
329
|
-
// When incremental patches (e.g., commit A adds method, commit B renames it)
|
|
330
|
-
// are both rebased, they capture the same cumulative diff and become redundant.
|
|
276
|
+
// Track content hashes to deduplicate converging incremental patches.
|
|
331
277
|
const seenContentHashes = new Set();
|
|
332
278
|
const absorbedPatchIds = new Set();
|
|
333
279
|
for (const result of results) {
|
|
@@ -340,14 +286,7 @@ export class ReplayService {
|
|
|
340
286
|
if (patch.base_generation === currentGenSha)
|
|
341
287
|
continue;
|
|
342
288
|
try {
|
|
343
|
-
// Check if any files
|
|
344
|
-
// be "absorbed" by the generator. Three cases:
|
|
345
|
-
// 1. File doesn't exist in the gen commit tree (truly new file)
|
|
346
|
-
// 2. File is protected by .fernignore (preserved during gen wipe,
|
|
347
|
-
// so it exists in the gen tree, but the generator didn't produce it)
|
|
348
|
-
// 3. File IS .fernignore itself (always preserved during gen wipe,
|
|
349
|
-
// but doesn't list itself in its own patterns)
|
|
350
|
-
// In all cases, git diff returns empty, but removing the patch is wrong.
|
|
289
|
+
// Check if any files are user-owned (new, .fernignore-protected, or .fernignore itself).
|
|
351
290
|
const fernignorePatterns = this.readFernignorePatterns();
|
|
352
291
|
const isUserOwned = await Promise.all(patch.files.map(async (file) => {
|
|
353
292
|
// .fernignore itself is always user-owned
|
|
@@ -380,9 +319,8 @@ export class ReplayService {
|
|
|
380
319
|
]).catch(() => null);
|
|
381
320
|
if (!diff || !diff.trim()) {
|
|
382
321
|
// Patch is now empty — customization was absorbed by the generator.
|
|
383
|
-
// Only removePatch (not absorbedPatchIds) — new patches that haven't
|
|
384
|
-
// been added yet are correctly ignored by the no-op removePatch.
|
|
385
322
|
this.lockManager.removePatch(patch.id);
|
|
323
|
+
absorbedPatchIds.add(patch.id);
|
|
386
324
|
absorbed++;
|
|
387
325
|
continue;
|
|
388
326
|
}
|
|
@@ -410,6 +348,94 @@ export class ReplayService {
|
|
|
410
348
|
}
|
|
411
349
|
return { absorbed, repointed, contentRebased, keptAsUserOwned, absorbedPatchIds };
|
|
412
350
|
}
|
|
351
|
+
/**
|
|
352
|
+
* Pre-generation rebase: update patches using the customer's current state.
|
|
353
|
+
* Called BEFORE commitGeneration() while HEAD has customer code.
|
|
354
|
+
*/
|
|
355
|
+
async preGenerationRebase(patches) {
|
|
356
|
+
const lock = this.lockManager.read();
|
|
357
|
+
const currentGen = lock.current_generation;
|
|
358
|
+
// If the previous run was skip-application, clear the marker and
|
|
359
|
+
// skip all revert detection. Patches are preserved as-is.
|
|
360
|
+
if (this.lockManager.isReplaySkipped()) {
|
|
361
|
+
this.lockManager.clearReplaySkippedAt();
|
|
362
|
+
return { conflictResolved: 0, conflictAbsorbed: 0, contentRefreshed: 0 };
|
|
363
|
+
}
|
|
364
|
+
let conflictResolved = 0;
|
|
365
|
+
let conflictAbsorbed = 0;
|
|
366
|
+
let contentRefreshed = 0;
|
|
367
|
+
for (const patch of patches) {
|
|
368
|
+
if (patch.base_generation === currentGen) {
|
|
369
|
+
// Content refresh: check if user modified their customization
|
|
370
|
+
// since the last replay commit.
|
|
371
|
+
try {
|
|
372
|
+
const diff = await this.git.exec(["diff", currentGen, "HEAD", "--", ...patch.files]).catch(() => null);
|
|
373
|
+
if (diff === null)
|
|
374
|
+
continue;
|
|
375
|
+
if (!diff.trim()) {
|
|
376
|
+
// User reverted all customizations in this patch
|
|
377
|
+
this.lockManager.removePatch(patch.id);
|
|
378
|
+
contentRefreshed++;
|
|
379
|
+
continue;
|
|
380
|
+
}
|
|
381
|
+
const newContentHash = this.detector.computeContentHash(diff);
|
|
382
|
+
if (newContentHash !== patch.content_hash) {
|
|
383
|
+
// User changed their customization — update patch content
|
|
384
|
+
// and recalculate the files list (some files may no longer differ)
|
|
385
|
+
const filesOutput = await this.git.exec(["diff", "--name-only", currentGen, "HEAD", "--", ...patch.files]).catch(() => null);
|
|
386
|
+
const newFiles = filesOutput
|
|
387
|
+
? filesOutput.trim().split("\n").filter(Boolean)
|
|
388
|
+
.filter((f) => !f.startsWith(".fern/"))
|
|
389
|
+
: patch.files;
|
|
390
|
+
if (newFiles.length === 0) {
|
|
391
|
+
this.lockManager.removePatch(patch.id);
|
|
392
|
+
}
|
|
393
|
+
else {
|
|
394
|
+
this.lockManager.updatePatch(patch.id, {
|
|
395
|
+
patch_content: diff,
|
|
396
|
+
content_hash: newContentHash,
|
|
397
|
+
files: newFiles,
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
contentRefreshed++;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
catch {
|
|
404
|
+
// If anything fails, leave the patch unchanged
|
|
405
|
+
}
|
|
406
|
+
continue;
|
|
407
|
+
}
|
|
408
|
+
try {
|
|
409
|
+
// Check for unresolved conflict markers in HEAD
|
|
410
|
+
const markerFiles = await this.git.exec(["grep", "-l", "<<<<<<<", "HEAD", "--", ...patch.files]).catch(() => "");
|
|
411
|
+
if (markerFiles.trim())
|
|
412
|
+
continue;
|
|
413
|
+
// Compute customer's resolved state relative to current generation
|
|
414
|
+
const diff = await this.git.exec(["diff", currentGen, "HEAD", "--", ...patch.files]).catch(() => null);
|
|
415
|
+
// Diff command failed (e.g., invalid SHA) — skip this patch
|
|
416
|
+
if (diff === null)
|
|
417
|
+
continue;
|
|
418
|
+
if (!diff.trim()) {
|
|
419
|
+
// Empty diff — customer reverted their customization
|
|
420
|
+
this.lockManager.removePatch(patch.id);
|
|
421
|
+
conflictAbsorbed++;
|
|
422
|
+
continue;
|
|
423
|
+
}
|
|
424
|
+
// Update the patch with the resolved content
|
|
425
|
+
const newContentHash = this.detector.computeContentHash(diff);
|
|
426
|
+
this.lockManager.updatePatch(patch.id, {
|
|
427
|
+
base_generation: currentGen,
|
|
428
|
+
patch_content: diff,
|
|
429
|
+
content_hash: newContentHash,
|
|
430
|
+
});
|
|
431
|
+
conflictResolved++;
|
|
432
|
+
}
|
|
433
|
+
catch {
|
|
434
|
+
// If anything fails, leave the patch unchanged
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
return { conflictResolved, conflictAbsorbed, contentRefreshed };
|
|
438
|
+
}
|
|
413
439
|
/**
|
|
414
440
|
* Read .fernignore patterns from the output directory.
|
|
415
441
|
* Returns an empty array if .fernignore doesn't exist.
|
|
@@ -426,7 +452,7 @@ export class ReplayService {
|
|
|
426
452
|
/**
|
|
427
453
|
* Build the final report from results.
|
|
428
454
|
*/
|
|
429
|
-
buildReport(flow, patches, results, options, warnings, rebaseCounts) {
|
|
455
|
+
buildReport(flow, patches, results, options, warnings, rebaseCounts, preRebaseCounts) {
|
|
430
456
|
const conflictResults = results.filter((r) => r.status === "conflict");
|
|
431
457
|
const conflictDetails = conflictResults
|
|
432
458
|
.map((r) => ({
|
|
@@ -446,6 +472,10 @@ export class ReplayService {
|
|
|
446
472
|
patchesRepointed: rebaseCounts && rebaseCounts.repointed > 0 ? rebaseCounts.repointed : undefined,
|
|
447
473
|
patchesContentRebased: rebaseCounts && rebaseCounts.contentRebased > 0 ? rebaseCounts.contentRebased : undefined,
|
|
448
474
|
patchesKeptAsUserOwned: rebaseCounts && rebaseCounts.keptAsUserOwned > 0 ? rebaseCounts.keptAsUserOwned : undefined,
|
|
475
|
+
patchesConflictResolved: preRebaseCounts && (preRebaseCounts.conflictResolved + preRebaseCounts.conflictAbsorbed) > 0
|
|
476
|
+
? preRebaseCounts.conflictResolved + preRebaseCounts.conflictAbsorbed : undefined,
|
|
477
|
+
patchesRefreshed: preRebaseCounts && preRebaseCounts.contentRefreshed > 0
|
|
478
|
+
? preRebaseCounts.contentRefreshed : undefined,
|
|
449
479
|
conflicts: conflictResults
|
|
450
480
|
.flatMap((r) => r.fileResults?.filter((f) => f.status === "conflict") ?? []),
|
|
451
481
|
conflictDetails: conflictDetails.length > 0 ? conflictDetails : undefined,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReplayService.js","sourceRoot":"","sources":["../src/ReplayService.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ReplayService.js","sourceRoot":"","sources":["../src/ReplayService.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -4,13 +4,12 @@ import { existsSync } from "node:fs";
|
|
|
4
4
|
import { GitClient } from "./git/GitClient.js";
|
|
5
5
|
import { LockfileManager } from "./LockfileManager.js";
|
|
6
6
|
import { ReplayDetector } from "./ReplayDetector.js";
|
|
7
|
-
import { ReplayService
|
|
7
|
+
import { ReplayService } from "./ReplayService.js";
|
|
8
8
|
import { FernignoreMigrator } from "./FernignoreMigrator.js";
|
|
9
9
|
import { bootstrap } from "./commands/bootstrap.js";
|
|
10
10
|
import { forget } from "./commands/forget.js";
|
|
11
11
|
import { reset } from "./commands/reset.js";
|
|
12
12
|
import { resolve as resolveConflicts } from "./commands/resolve.js";
|
|
13
|
-
import { DEFAULT_REPLAY_CONFIG } from "./types.js";
|
|
14
13
|
const COMMANDS = ["bootstrap", "status", "detect", "replay", "migrate", "forget", "reset", "resolve"];
|
|
15
14
|
function usage() {
|
|
16
15
|
console.log(`Usage: fern-replay <command> <sdk-dir> [options]
|
|
@@ -30,7 +29,6 @@ Options:
|
|
|
30
29
|
--no-check Skip conflict marker check (resolve command only)
|
|
31
30
|
--migrate-fernignore Move untrackable .fernignore patterns to replay.yml
|
|
32
31
|
--max-commits <n> Max commits to scan (default: 500)
|
|
33
|
-
--on-conflict <policy> Override on_conflict policy (fail, keep-mine, keep-generated, prompt)
|
|
34
32
|
|
|
35
33
|
Examples:
|
|
36
34
|
fern-replay bootstrap ./my-sdk
|
|
@@ -75,9 +73,6 @@ function parseArgs(argv) {
|
|
|
75
73
|
else if (arg === "--max-commits" && args[i + 1]) {
|
|
76
74
|
flags.maxCommits = args[++i];
|
|
77
75
|
}
|
|
78
|
-
else if (arg === "--on-conflict" && args[i + 1]) {
|
|
79
|
-
flags.onConflict = args[++i];
|
|
80
|
-
}
|
|
81
76
|
else if (arg === "--force") {
|
|
82
77
|
flags.force = true;
|
|
83
78
|
}
|
|
@@ -211,31 +206,8 @@ async function runReplay(dir, flags) {
|
|
|
211
206
|
console.log("(dry-run mode)\n");
|
|
212
207
|
else
|
|
213
208
|
console.log();
|
|
214
|
-
|
|
215
|
-
const
|
|
216
|
-
if (flags.onConflict) {
|
|
217
|
-
const policy = flags.onConflict;
|
|
218
|
-
config.on_conflict = {
|
|
219
|
-
ci: policy,
|
|
220
|
-
local: policy,
|
|
221
|
-
};
|
|
222
|
-
}
|
|
223
|
-
const service = new ReplayService(dir, config);
|
|
224
|
-
let report;
|
|
225
|
-
try {
|
|
226
|
-
report = await service.runReplay({ dryRun });
|
|
227
|
-
}
|
|
228
|
-
catch (err) {
|
|
229
|
-
if (err instanceof ReplayConflictError) {
|
|
230
|
-
report = err.report;
|
|
231
|
-
printReport(report);
|
|
232
|
-
console.error("\nReplay failed: conflicts detected (on_conflict: fail)");
|
|
233
|
-
console.error("Resolve conflicts manually, then run: fern-replay resolve <dir>");
|
|
234
|
-
console.error("Or run: fern-replay forget <file-pattern> to remove problematic patches");
|
|
235
|
-
process.exit(1);
|
|
236
|
-
}
|
|
237
|
-
throw err;
|
|
238
|
-
}
|
|
209
|
+
const service = new ReplayService(dir, { enabled: true });
|
|
210
|
+
const report = await service.runReplay({ dryRun });
|
|
239
211
|
printReport(report);
|
|
240
212
|
}
|
|
241
213
|
function printReport(report) {
|
|
@@ -256,6 +228,12 @@ function printReport(report) {
|
|
|
256
228
|
if (report.patchesKeptAsUserOwned) {
|
|
257
229
|
console.log(`Patches kept (user-owned files): ${report.patchesKeptAsUserOwned}`);
|
|
258
230
|
}
|
|
231
|
+
if (report.patchesConflictResolved) {
|
|
232
|
+
console.log(`Patches conflict-resolved (pre-rebase): ${report.patchesConflictResolved}`);
|
|
233
|
+
}
|
|
234
|
+
if (report.patchesRefreshed) {
|
|
235
|
+
console.log(`Patches refreshed (user modified): ${report.patchesRefreshed}`);
|
|
236
|
+
}
|
|
259
237
|
if (report.wouldApply && report.wouldApply.length > 0) {
|
|
260
238
|
console.log("\nWould apply:");
|
|
261
239
|
for (const patch of report.wouldApply) {
|