


























@@ -2,6 +2,7 @@ import { execFileSync } from "node:child_process";
22import { appendFileSync, existsSync, readFileSync } from "node:fs";
33import { booleanFlag, parseFlagArgs, stringFlag } from "./lib/arg-utils.mjs";
44import { isDirectRunUrl } from "./lib/direct-run.mjs";
5+import { resolveMergeHeadDiffBase } from "./lib/merge-head-diff-base.mjs";
5667const GIT_OUTPUT_MAX_BUFFER = 64 * 1024 * 1024;
78const IMPLAUSIBLE_NO_MERGE_BASE_DIFF_PATHS = 200;
@@ -213,13 +214,21 @@ export function detectChangedLanes(changedPaths, options = {}) {
213214}
214215215216/**
216- * @param {{ paths: string[]; base: string; head?: string; staged?: boolean }} params
217+ * @param {{ paths: string[]; base: string; head?: string; staged?: boolean; mergeHeadFirstParent?: boolean }} params
217218 * @returns {ChangedLaneResult}
218219 */
219220export function detectChangedLanesForPaths(params) {
221+const base = params.staged
222+ ? params.base
223+ : resolveMergeHeadDiffBase({
224+base: params.base,
225+head: params.head ?? "HEAD",
226+maxBuffer: GIT_OUTPUT_MAX_BUFFER,
227+preferFirstParent: params.mergeHeadFirstParent === true,
228+});
220229const packageJsonChangeKind = params.paths.includes("package.json")
221230 ? classifyPackageJsonChangeFromGit({
222-base: params.base,
231+ base,
223232head: params.head,
224233staged: params.staged,
225234})
@@ -228,13 +237,19 @@ export function detectChangedLanesForPaths(params) {
228237}
229238230239/**
231- * @param {{ base: string; head?: string; includeWorktree?: boolean; cwd?: string }} params
240+ * @param {{ base: string; head?: string; includeWorktree?: boolean; cwd?: string; mergeHeadFirstParent?: boolean }} params
232241 * @returns {string[]}
233242 */
234243export function listChangedPathsFromGit(params) {
235-const base = params.base;
236244const head = params.head ?? "HEAD";
237245const cwd = params.cwd ?? process.cwd();
246+const base = resolveMergeHeadDiffBase({
247+base: params.base,
248+ head,
249+ cwd,
250+maxBuffer: GIT_OUTPUT_MAX_BUFFER,
251+preferFirstParent: params.mergeHeadFirstParent === true,
252+});
238253if (!base) {
239254return [];
240255}
@@ -453,6 +468,7 @@ function parseArgs(argv) {
453468base: "origin/main",
454469head: "HEAD",
455470staged: false,
471+mergeHeadFirstParent: false,
456472json: false,
457473githubOutput: false,
458474help: false,
@@ -465,6 +481,7 @@ function parseArgs(argv) {
465481stringFlag("--base", "base"),
466482stringFlag("--head", "head"),
467483booleanFlag("--staged", "staged"),
484+booleanFlag("--merge-head-first-parent", "mergeHeadFirstParent"),
468485booleanFlag("--json", "json"),
469486booleanFlag("--github-output", "githubOutput"),
470487booleanFlag("--help", "help"),
@@ -538,12 +555,17 @@ if (isDirectRun()) {
538555 ? args.paths
539556 : args.staged
540557 ? listStagedChangedPaths()
541- : listChangedPathsFromGit({ base: args.base, head: args.head });
558+ : listChangedPathsFromGit({
559+base: args.base,
560+head: args.head,
561+mergeHeadFirstParent: args.mergeHeadFirstParent,
562+});
542563const result = detectChangedLanesForPaths({
543564 paths,
544565base: args.base,
545566head: args.head,
546567staged: args.staged,
568+mergeHeadFirstParent: args.mergeHeadFirstParent,
547569});
548570if (args.githubOutput) {
549571writeChangedLaneGitHubOutput(result);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。