Skip to content

Commit 3040417

Browse files
kulvirgitclaude
andcommitted
fix: keep upstream packages instead of deleting them during merge
- Accept upstream's version for skipFiles instead of `git rm` - Remove `cleanSkippedPackages()` post-merge step - Prevents merge friction on future upstream merges Co-Authored-By: Kai (Claude Opus 4.6) <noreply@anthropic.com>
1 parent c6aae58 commit 3040417

2 files changed

Lines changed: 6 additions & 34 deletions

File tree

script/upstream/merge.ts

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import { parseArgs } from "util"
2323
import { git, gitSafe, tagExists, currentBranch, hasUncommittedChanges, conflictedFiles } from "./utils/git"
2424
import { loadConfig, repoRoot } from "./utils/config"
2525
import { resolveKeepOurs } from "./transforms/keep-ours"
26-
import { resolveSkipFiles, cleanSkippedPackages } from "./transforms/skip-files"
26+
import { resolveSkipFiles } from "./transforms/skip-files"
2727
import { resolveLockFiles, regenerateLockFile } from "./transforms/lock-files"
2828

2929
const { values: args } = parseArgs({
@@ -143,14 +143,6 @@ async function continueAfterManualResolution() {
143143
}
144144

145145
async function postMerge(config: ReturnType<typeof loadConfig>) {
146-
// Clean up skipped packages that might have been added by upstream
147-
console.log("\nPost-merge: Cleaning skipped packages...")
148-
const cleaned = cleanSkippedPackages()
149-
if (cleaned.length > 0) {
150-
console.log(` Removed ${cleaned.length} skipped directories`)
151-
git('commit -m "chore: remove unused upstream packages after merge"')
152-
}
153-
154146
// Regenerate lock file
155147
console.log("\nPost-merge: Regenerating lock file...")
156148
regenerateLockFile()

script/upstream/transforms/skip-files.ts

Lines changed: 5 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import { git, conflictedFiles } from "../utils/git"
33
import { loadConfig } from "../utils/config"
44

55
/**
6-
* For conflicted files matching skipFiles patterns, resolve by removing them.
7-
* These are upstream packages we don't use (e.g., packages/app/**, packages/desktop/**).
6+
* For conflicted files matching skipFiles patterns, resolve by accepting upstream's version.
7+
* These are upstream packages we don't modify — we keep them to avoid merge friction.
88
*/
99
export function resolveSkipFiles(): { resolved: string[]; skipped: string[] } {
1010
const config = loadConfig()
@@ -15,7 +15,9 @@ export function resolveSkipFiles(): { resolved: string[]; skipped: string[] } {
1515
for (const file of conflicts) {
1616
const shouldSkip = config.skipFiles.some((pattern) => minimatch(file, pattern))
1717
if (shouldSkip) {
18-
git(`rm --force "${file}"`)
18+
// Accept upstream's version — we don't modify these files
19+
git(`checkout --theirs "${file}"`)
20+
git(`add "${file}"`)
1921
resolved.push(file)
2022
} else {
2123
skipped.push(file)
@@ -24,25 +26,3 @@ export function resolveSkipFiles(): { resolved: string[]; skipped: string[] } {
2426

2527
return { resolved, skipped }
2628
}
27-
28-
/**
29-
* After merge, remove any new files from skipped packages that upstream added.
30-
*/
31-
export function cleanSkippedPackages(): string[] {
32-
const config = loadConfig()
33-
const cleaned: string[] = []
34-
35-
for (const pattern of config.skipFiles) {
36-
// Only clean directory-level patterns
37-
if (!pattern.endsWith("/**")) continue
38-
const dir = pattern.replace("/**", "")
39-
try {
40-
git(`rm -rf "${dir}"`)
41-
cleaned.push(dir)
42-
} catch {
43-
// Directory doesn't exist, skip
44-
}
45-
}
46-
47-
return cleaned
48-
}

0 commit comments

Comments
 (0)