@mmnto/cli 1.53.8 → 1.53.9
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/lint.d.ts +11 -0
- package/dist/commands/lint.d.ts.map +1 -1
- package/dist/commands/lint.js +4 -1
- package/dist/commands/lint.js.map +1 -1
- package/dist/commands/lint.test.js +34 -1
- package/dist/commands/lint.test.js.map +1 -1
- package/dist/commands/shield-estimate.test.js +12 -0
- package/dist/commands/shield-estimate.test.js.map +1 -1
- package/dist/commands/shield.d.ts +11 -0
- package/dist/commands/shield.d.ts.map +1 -1
- package/dist/commands/shield.js.map +1 -1
- package/dist/git.d.ts +27 -3
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +81 -5
- package/dist/git.js.map +1 -1
- package/dist/git.test.js +206 -0
- package/dist/git.test.js.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/git.d.ts
CHANGED
|
@@ -29,6 +29,27 @@ export interface DiffForReviewOptions {
|
|
|
29
29
|
staged?: boolean;
|
|
30
30
|
/** Explicit ref range (mmnto-ai/totem#1717). When set, bypasses the implicit fallback chain. */
|
|
31
31
|
diff?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Force the branch-vs-base (push-gate) diff scope regardless of working-tree
|
|
34
|
+
* state (mmnto-ai/totem#2091). Mutually exclusive with `staged` and `diff`.
|
|
35
|
+
*/
|
|
36
|
+
branch?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Explicit base branch NAME for the forced branch-vs-base scope
|
|
39
|
+
* (mmnto-ai/totem#2091). Resolved through `getGitBranchDiff`'s
|
|
40
|
+
* origin-preference logic (`origin/<base>...HEAD`, else local `<base>` —
|
|
41
|
+
* mmnto-ai/totem#2054); NOT a raw ref range. Setting `base` implies
|
|
42
|
+
* `branch`. Mutually exclusive with `staged` and `diff`.
|
|
43
|
+
*/
|
|
44
|
+
base?: string;
|
|
45
|
+
/**
|
|
46
|
+
* Lint-only opt-in for the narrow-scope advisory (mmnto-ai/totem#2090).
|
|
47
|
+
* When the resolved source is `staged`/`uncommitted` and the branch-vs-base
|
|
48
|
+
* scope the pre-push gate checks would cover more files, a one-line warning
|
|
49
|
+
* names the gap. Never set by `review` — staged-slice review is routinely
|
|
50
|
+
* intentional (truncation-cliff workaround), so warning there trains ignore.
|
|
51
|
+
*/
|
|
52
|
+
warnNarrowScope?: boolean;
|
|
32
53
|
}
|
|
33
54
|
export interface DiffForReviewConfig {
|
|
34
55
|
ignorePatterns: string[];
|
|
@@ -54,9 +75,12 @@ export declare const REVIEW_DIFF_TRUNCATION_THRESHOLD = 50000;
|
|
|
54
75
|
* Shared diff-fetching logic used by both `shield` and `lint` commands.
|
|
55
76
|
*
|
|
56
77
|
* Resolution order:
|
|
57
|
-
* 1. `--
|
|
58
|
-
*
|
|
59
|
-
*
|
|
78
|
+
* 1. `--branch` / `--base <ref>` (forced push-gate scope, mmnto-ai/totem#2091 —
|
|
79
|
+
* jumps straight to the branch-vs-base diff of step 4, ignoring the
|
|
80
|
+
* working tree; mutually exclusive with 2 and 3)
|
|
81
|
+
* 2. `--diff <range>` (explicit, no fallback)
|
|
82
|
+
* 3. `--staged` (staged-only) or working-tree (`all`) diff
|
|
83
|
+
* 4. Branch-vs-base diff (`<default>...HEAD`) when 3 yields nothing
|
|
60
84
|
*
|
|
61
85
|
* The chosen resolution path is logged to stderr (mmnto-ai/totem#1717) so the operator's
|
|
62
86
|
* mental model matches the actual git invocation. Diffs exceeding
|
package/dist/git.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,cAAc,EACd,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,cAAc,GACf,MAAM,cAAc,CAAC;AAMtB;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAO5E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,GACZ;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAU1D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,GACZ,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAazC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAM/E;AAID,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,GAAG,QAAQ,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAEjG,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gGAAgG;IAChG,IAAI,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,cAAc,EACd,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,cAAc,GACf,MAAM,cAAc,CAAC;AAMtB;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAO5E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,GACZ;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAU1D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,GACZ,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAazC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAM/E;AAID,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,GAAG,QAAQ,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAEjG,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gGAAgG;IAChG,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,kGAAkG;IAClG,MAAM,EAAE,mBAAmB,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,gCAAgC,QAAS,CAAC;AAEvD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,oBAAoB,EAC7B,MAAM,EAAE,mBAAmB,EAC3B,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAgKrC"}
|
package/dist/git.js
CHANGED
|
@@ -74,9 +74,12 @@ export const REVIEW_DIFF_TRUNCATION_THRESHOLD = 50_000;
|
|
|
74
74
|
* Shared diff-fetching logic used by both `shield` and `lint` commands.
|
|
75
75
|
*
|
|
76
76
|
* Resolution order:
|
|
77
|
-
* 1. `--
|
|
78
|
-
*
|
|
79
|
-
*
|
|
77
|
+
* 1. `--branch` / `--base <ref>` (forced push-gate scope, mmnto-ai/totem#2091 —
|
|
78
|
+
* jumps straight to the branch-vs-base diff of step 4, ignoring the
|
|
79
|
+
* working tree; mutually exclusive with 2 and 3)
|
|
80
|
+
* 2. `--diff <range>` (explicit, no fallback)
|
|
81
|
+
* 3. `--staged` (staged-only) or working-tree (`all`) diff
|
|
82
|
+
* 4. Branch-vs-base diff (`<default>...HEAD`) when 3 yields nothing
|
|
80
83
|
*
|
|
81
84
|
* The chosen resolution path is logged to stderr (mmnto-ai/totem#1717) so the operator's
|
|
82
85
|
* mental model matches the actual git invocation. Diffs exceeding
|
|
@@ -88,11 +91,61 @@ export const REVIEW_DIFF_TRUNCATION_THRESHOLD = 50_000;
|
|
|
88
91
|
*/
|
|
89
92
|
export async function getDiffForReview(options, config, cwd, tag) {
|
|
90
93
|
const { log } = await import('./ui.js');
|
|
91
|
-
const { extractChangedFiles, filterDiffByPatterns, getDefaultBranch, getGitBranchDiff, getGitDiff, getGitDiffRange, sanitizeForTerminal, } = await import('@mmnto/totem');
|
|
94
|
+
const { TotemError, TotemGitError, extractChangedFiles, filterDiffByPatterns, getDefaultBranch, getGitBranchDiff, getGitDiff, getGitDiffRange, sanitizeForTerminal, } = await import('@mmnto/totem');
|
|
95
|
+
// ── Eager scope-selector validation (mmnto-ai/totem#2091) ──
|
|
96
|
+
// `--base` implies branch scope. Both are mutually exclusive with the
|
|
97
|
+
// other explicit scope selectors — validated BEFORE any git work so the
|
|
98
|
+
// error names the conflicting flags instead of silently preferring one
|
|
99
|
+
// scope (the implicit-scope dishonesty mmnto-ai/totem#2055 exists to kill).
|
|
100
|
+
const forcedBranchScope = options.branch === true || options.base !== undefined;
|
|
101
|
+
// Names the flag(s) the user actually passed — shared by the conflict error
|
|
102
|
+
// AND the diff-source disclosure line so neither cites a flag that wasn't
|
|
103
|
+
// given (a `--base`-only run must not log `--branch` — Greptile on #2098).
|
|
104
|
+
const forcingFlags = [
|
|
105
|
+
...(options.branch ? ['--branch'] : []),
|
|
106
|
+
...(options.base !== undefined ? ['--base'] : []),
|
|
107
|
+
].join('/');
|
|
108
|
+
if (forcedBranchScope) {
|
|
109
|
+
const conflicting = [
|
|
110
|
+
...(options.staged ? ['--staged'] : []),
|
|
111
|
+
...(options.diff !== undefined ? ['--diff'] : []),
|
|
112
|
+
];
|
|
113
|
+
if (conflicting.length > 0) {
|
|
114
|
+
throw new TotemError('FLAG_CONFLICT', `${forcingFlags} cannot be combined with ${conflicting.join(', ')}: each selects a different diff scope, and silent precedence would hide which scope actually ran.`, 'Re-run with exactly one scope selector: --branch/--base <ref>, --staged, or --diff <range>.');
|
|
115
|
+
}
|
|
116
|
+
if (options.base !== undefined) {
|
|
117
|
+
// Mirrors getGitDiffRange's flag-injection guard (mmnto-ai/totem#1717):
|
|
118
|
+
// reject empty values and leading `-` before the name reaches git.
|
|
119
|
+
const trimmedBase = options.base.trim();
|
|
120
|
+
if (trimmedBase.length === 0) {
|
|
121
|
+
throw new TotemGitError('Empty base branch supplied to --base.', 'Provide a non-empty branch name, e.g. --base main.');
|
|
122
|
+
}
|
|
123
|
+
if (trimmedBase.startsWith('-')) {
|
|
124
|
+
throw new TotemGitError(`Invalid base branch: ${trimmedBase}. Branch names may not start with '-' (git-flag injection guard).`, 'Provide a plain branch name such as "main" without leading dashes.');
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
92
128
|
const allIgnore = [...config.ignorePatterns, ...(config.shieldIgnorePatterns ?? [])];
|
|
93
129
|
let diff;
|
|
94
130
|
let source;
|
|
95
|
-
if (
|
|
131
|
+
if (forcedBranchScope) {
|
|
132
|
+
// Forced push-gate scope (mmnto-ai/totem#2091): bypass the working-tree
|
|
133
|
+
// checks entirely and diff branch-vs-base — exactly what the pre-push
|
|
134
|
+
// gate evaluates. Reuses the auto-fallback's source value so downstream
|
|
135
|
+
// consumers treat forced and auto branch scope identically; the log line
|
|
136
|
+
// discloses the forcing. getGitBranchDiff's TotemGitError (with its
|
|
137
|
+
// "git fetch origin <ref>" hint) bubbles when the base resolves nowhere.
|
|
138
|
+
const base = options.base !== undefined ? options.base.trim() : getDefaultBranch(cwd);
|
|
139
|
+
const safeBase = sanitizeForTerminal(base);
|
|
140
|
+
log.info(tag, `Diff source: branch-vs-base (${forcingFlags}; origin/${safeBase}...HEAD, else local ${safeBase})`);
|
|
141
|
+
diff = filterDiffByPatterns(getGitBranchDiff(cwd, base), allIgnore);
|
|
142
|
+
source = 'branch-vs-base';
|
|
143
|
+
if (!diff.trim()) {
|
|
144
|
+
log.warn(tag, 'No changes detected. Nothing to review.');
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
else if (options.diff !== undefined) {
|
|
96
149
|
// Explicit-range path — no fallback. getGitDiffRange rejects flag-injection
|
|
97
150
|
// (leading `-`) and empty values; ignore patterns still apply per repo policy.
|
|
98
151
|
log.info(tag, `Diff source: explicit range (${options.diff})`);
|
|
@@ -129,6 +182,29 @@ export async function getDiffForReview(options, config, cwd, tag) {
|
|
|
129
182
|
}
|
|
130
183
|
const changedFiles = extractChangedFiles(diff);
|
|
131
184
|
log.info(tag, `Changed files (${changedFiles.length}): ${changedFiles.join(', ')}`);
|
|
185
|
+
// ── Narrow-scope advisory (mmnto-ai/totem#2090) — lint-only opt-in ──
|
|
186
|
+
// When lint resolved a working-tree scope, compare against the
|
|
187
|
+
// branch-vs-base scope the pre-push gate checks. The branch file set runs
|
|
188
|
+
// through the SAME post-ignore-filter pipeline as the gate would, so N
|
|
189
|
+
// counts only files the gate would actually lint (raw `--name-only`
|
|
190
|
+
// overcounts ignored files). Set difference avoids double-counting files
|
|
191
|
+
// changed both on the branch and in the working tree.
|
|
192
|
+
if (options.warnNarrowScope && (source === 'staged' || source === 'uncommitted')) {
|
|
193
|
+
try {
|
|
194
|
+
const branchDiff = filterDiffByPatterns(getGitBranchDiff(cwd, getDefaultBranch(cwd)), allIgnore);
|
|
195
|
+
const branchFiles = extractChangedFiles(branchDiff);
|
|
196
|
+
const currentScope = new Set(changedFiles);
|
|
197
|
+
const unlinted = branchFiles.filter((file) => !currentScope.has(file));
|
|
198
|
+
if (unlinted.length > 0) {
|
|
199
|
+
const opening = source === 'staged' ? 'Linting staged changes only' : 'Linting uncommitted changes only';
|
|
200
|
+
log.warn(tag, `${opening} — the pre-push gate checks the full branch (${unlinted.length} more file(s)). Lint a clean tree or use \`totem lint --branch\` to match.`);
|
|
201
|
+
}
|
|
202
|
+
// totem-context: Tenet-4-justified silent skip (mmnto-ai/totem#2090) — the warning is a best-effort advisory ABOUT scope, not a verdict input; its failure states (detached HEAD, no base branch, shallow clone) are exactly where branch-vs-base scope is undefined, so there is no honest warning to emit. Lint's verdict, diff, and exit code are untouched.
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
// Intentionally silent — see the totem-context justification above.
|
|
206
|
+
}
|
|
207
|
+
}
|
|
132
208
|
return { diff, changedFiles, source };
|
|
133
209
|
}
|
|
134
210
|
//# sourceMappingURL=git.js.map
|
package/dist/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,cAAc,EACd,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,cAAc,GACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,2DAA2D;AAE3D;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW,EAAE,IAAY,EAAE,IAAa;IACjE,IAAI,CAAC;QACH,QAAQ,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,IAAI,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAChF,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,GAAW,EACX,IAAY,EACZ,IAAa;IAEb,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,IAAI,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACvF,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QACnE,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QAC7E,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QAC3E,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACnD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,GAAW,EACX,IAAY,EACZ,IAAa;IAEb,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,IAAI,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACzF,OAAO,MAAM;aACV,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,OAAO,CAAC;aACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACzD,CAAC,CAAC,CAAC;IACP,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,IAAY,EAAE,IAAa;IACrE,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,IAAI,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC;IAC/F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AA6CD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,MAAM,CAAC;AAEvD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAA6B,EAC7B,MAA2B,EAC3B,GAAW,EACX,GAAW;IAEX,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,EACJ,UAAU,EACV,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,mBAAmB,GACpB,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;IAEjC,8DAA8D;IAC9D,sEAAsE;IACtE,wEAAwE;IACxE,uEAAuE;IACvE,4EAA4E;IAC5E,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC;IAChF,4EAA4E;IAC5E,0EAA0E;IAC1E,2EAA2E;IAC3E,MAAM,YAAY,GAAG;QACnB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAClD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,IAAI,iBAAiB,EAAE,CAAC;QACtB,MAAM,WAAW,GAAG;YAClB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAClD,CAAC;QACF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,UAAU,CAClB,eAAe,EACf,GAAG,YAAY,4BAA4B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,mGAAmG,EACpK,6FAA6F,CAC9F,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/B,wEAAwE;YACxE,mEAAmE;YACnE,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACxC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,aAAa,CACrB,uCAAuC,EACvC,oDAAoD,CACrD,CAAC;YACJ,CAAC;YACD,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChC,MAAM,IAAI,aAAa,CACrB,wBAAwB,WAAW,mEAAmE,EACtG,oEAAoE,CACrE,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,CAAC,GAAG,MAAM,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC,CAAC;IAErF,IAAI,IAAY,CAAC;IACjB,IAAI,MAA2B,CAAC;IAEhC,IAAI,iBAAiB,EAAE,CAAC;QACtB,wEAAwE;QACxE,sEAAsE;QACtE,wEAAwE;QACxE,yEAAyE;QACzE,oEAAoE;QACpE,yEAAyE;QACzE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACtF,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC3C,GAAG,CAAC,IAAI,CACN,GAAG,EACH,gCAAgC,YAAY,YAAY,QAAQ,uBAAuB,QAAQ,GAAG,CACnG,CAAC;QACF,IAAI,GAAG,oBAAoB,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;QACpE,MAAM,GAAG,gBAAgB,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,yCAAyC,CAAC,CAAC;YACzD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACtC,4EAA4E;QAC5E,+EAA+E;QAC/E,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,gCAAgC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;QAC/D,IAAI,GAAG,oBAAoB,CAAC,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;QAC3E,MAAM,GAAG,gBAAgB,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,OAAO,CAAC,IAAI,wCAAwC,CAAC,CAAC;YACvF,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAqB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;QACjE,MAAM,WAAW,GAAwB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC;QACnF,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,WAAW,EAAE,CAAC,CAAC;QAC7C,IAAI,GAAG,oBAAoB,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;QAC9D,MAAM,GAAG,WAAW,CAAC;QAErB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;YACnC,0EAA0E;YAC1E,mEAAmE;YACnE,qFAAqF;YACrF,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAC3C,GAAG,CAAC,IAAI,CACN,GAAG,EACH,uCAAuC,QAAQ,uBAAuB,QAAQ,GAAG,CAClF,CAAC;YACF,IAAI,GAAG,oBAAoB,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;YACpE,MAAM,GAAG,gBAAgB,CAAC;QAC5B,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,yCAAyC,CAAC,CAAC;YACzD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,GAAG,gCAAgC,EAAE,CAAC;QACnD,GAAG,CAAC,IAAI,CACN,GAAG,EACH,gBAAgB,gCAAgC,WAAW,IAAI,CAAC,MAAM,6GAA6G,CACpL,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC/C,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,YAAY,CAAC,MAAM,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEpF,uEAAuE;IACvE,+DAA+D;IAC/D,0EAA0E;IAC1E,uEAAuE;IACvE,oEAAoE;IACpE,yEAAyE;IACzE,sDAAsD;IACtD,IAAI,OAAO,CAAC,eAAe,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,aAAa,CAAC,EAAE,CAAC;QACjF,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,oBAAoB,CACrC,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAC5C,SAAS,CACV,CAAC;YACF,MAAM,WAAW,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;YACpD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;YAC3C,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YACvE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,OAAO,GACX,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,kCAAkC,CAAC;gBAC3F,GAAG,CAAC,IAAI,CACN,GAAG,EACH,GAAG,OAAO,gDAAgD,QAAQ,CAAC,MAAM,4EAA4E,CACtJ,CAAC;YACJ,CAAC;YACD,gWAAgW;QAClW,CAAC;QAAC,MAAM,CAAC;YACP,oEAAoE;QACtE,CAAC;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;AACxC,CAAC"}
|
package/dist/git.test.js
CHANGED
|
@@ -40,13 +40,27 @@ vi.mock('@mmnto/totem', async () => {
|
|
|
40
40
|
getDefaultBranch: vi.fn(() => 'main'),
|
|
41
41
|
};
|
|
42
42
|
});
|
|
43
|
+
// Mock the ui logger so the #2090/#2091 tests can assert on the exact
|
|
44
|
+
// disclosure / warning lines getDiffForReview emits.
|
|
45
|
+
vi.mock('./ui.js', () => ({
|
|
46
|
+
log: {
|
|
47
|
+
info: vi.fn(),
|
|
48
|
+
success: vi.fn(),
|
|
49
|
+
warn: vi.fn(),
|
|
50
|
+
error: vi.fn(),
|
|
51
|
+
dim: vi.fn(),
|
|
52
|
+
},
|
|
53
|
+
}));
|
|
43
54
|
// Must import after mock setup — vitest hoists vi.mock.
|
|
44
55
|
// Aliased so the imports don't shadow the top-of-file re-export checks.
|
|
45
56
|
const totemMod = await import('@mmnto/totem');
|
|
57
|
+
const uiMod = await import('./ui.js');
|
|
46
58
|
const mockSafeExec = vi.mocked(totemMod.safeExec);
|
|
47
59
|
const mockGetGitDiff = vi.mocked(totemMod.getGitDiff);
|
|
48
60
|
const mockGetGitBranchDiff = vi.mocked(totemMod.getGitBranchDiff);
|
|
49
61
|
const mockGetGitDiffRange = vi.mocked(totemMod.getGitDiffRange);
|
|
62
|
+
const mockGetDefaultBranch = vi.mocked(totemMod.getDefaultBranch);
|
|
63
|
+
const mockLog = vi.mocked(uiMod.log);
|
|
50
64
|
describe('isAncestor', () => {
|
|
51
65
|
it('returns true for direct ancestor', () => {
|
|
52
66
|
mockSafeExec.mockReturnValueOnce('');
|
|
@@ -183,4 +197,196 @@ describe('getDiffForReview --diff (#1717)', () => {
|
|
|
183
197
|
expect(mockGetGitDiff).toHaveBeenCalledWith('staged', '/tmp');
|
|
184
198
|
});
|
|
185
199
|
});
|
|
200
|
+
// ─── getDiffForReview --branch/--base (#2091) ────────────
|
|
201
|
+
/** Build a minimal unified diff touching the given files. */
|
|
202
|
+
function diffFor(...files) {
|
|
203
|
+
const lines = files.flatMap((f) => [
|
|
204
|
+
`diff --git a/${f} b/${f}`,
|
|
205
|
+
`--- a/${f}`,
|
|
206
|
+
`+++ b/${f}`,
|
|
207
|
+
'@@ -1 +1 @@',
|
|
208
|
+
'+x',
|
|
209
|
+
]);
|
|
210
|
+
return `${lines.join('\n')}\n`;
|
|
211
|
+
}
|
|
212
|
+
describe('getDiffForReview --branch/--base (#2091)', () => {
|
|
213
|
+
const config = { ignorePatterns: [] };
|
|
214
|
+
beforeEach(() => {
|
|
215
|
+
mockGetGitDiffRange.mockReset();
|
|
216
|
+
mockGetGitDiff.mockReset();
|
|
217
|
+
mockGetGitBranchDiff.mockReset();
|
|
218
|
+
mockGetDefaultBranch.mockClear();
|
|
219
|
+
mockLog.info.mockClear();
|
|
220
|
+
mockLog.warn.mockClear();
|
|
221
|
+
});
|
|
222
|
+
it('--base forces branch scope even with a dirty working tree', async () => {
|
|
223
|
+
// Dirty tree: getGitDiff WOULD return uncommitted content — the forced
|
|
224
|
+
// path must never consult it, so none of it can enter the diff.
|
|
225
|
+
mockGetGitDiff.mockReturnValue(diffFor('dirty.ts'));
|
|
226
|
+
mockGetGitBranchDiff.mockReturnValue(diffFor('committed.ts'));
|
|
227
|
+
const result = await getDiffForReview({ base: 'develop' }, config, '/tmp', 'Lint');
|
|
228
|
+
expect(result).not.toBeNull();
|
|
229
|
+
expect(result.source).toBe('branch-vs-base');
|
|
230
|
+
expect(result.changedFiles).toEqual(['committed.ts']);
|
|
231
|
+
expect(mockGetGitDiff).not.toHaveBeenCalled();
|
|
232
|
+
expect(mockGetGitBranchDiff).toHaveBeenCalledWith('/tmp', 'develop');
|
|
233
|
+
});
|
|
234
|
+
it('--branch resolves the default branch and reports source: branch-vs-base', async () => {
|
|
235
|
+
mockGetGitBranchDiff.mockReturnValue(diffFor('a.ts'));
|
|
236
|
+
const result = await getDiffForReview({ branch: true }, config, '/tmp', 'Lint');
|
|
237
|
+
expect(result).not.toBeNull();
|
|
238
|
+
expect(result.source).toBe('branch-vs-base');
|
|
239
|
+
expect(mockGetGitBranchDiff).toHaveBeenCalledWith('/tmp', 'main');
|
|
240
|
+
expect(mockGetGitDiff).not.toHaveBeenCalled();
|
|
241
|
+
});
|
|
242
|
+
it('logs the forced diff-source disclosure line marking the forcing flag', async () => {
|
|
243
|
+
mockGetGitBranchDiff.mockReturnValue(diffFor('a.ts'));
|
|
244
|
+
await getDiffForReview({ branch: true }, config, '/tmp', 'Lint');
|
|
245
|
+
const disclosure = mockLog.info.mock.calls.find((c) => String(c[1]).startsWith('Diff source:'));
|
|
246
|
+
expect(disclosure).toBeDefined();
|
|
247
|
+
expect(disclosure[1]).toBe('Diff source: branch-vs-base (--branch; origin/main...HEAD, else local main)');
|
|
248
|
+
});
|
|
249
|
+
it('discloses only --base when --branch was not passed (Greptile on #2098)', async () => {
|
|
250
|
+
mockGetGitBranchDiff.mockReturnValue(diffFor('a.ts'));
|
|
251
|
+
await getDiffForReview({ base: 'develop' }, config, '/tmp', 'Lint');
|
|
252
|
+
const disclosure = mockLog.info.mock.calls.find((c) => String(c[1]).startsWith('Diff source:'));
|
|
253
|
+
expect(disclosure).toBeDefined();
|
|
254
|
+
expect(disclosure[1]).toBe('Diff source: branch-vs-base (--base; origin/develop...HEAD, else local develop)');
|
|
255
|
+
});
|
|
256
|
+
it('--branch + --staged throws FLAG_CONFLICT before any git function is invoked', async () => {
|
|
257
|
+
await expect(getDiffForReview({ branch: true, staged: true }, config, '/tmp', 'Lint')).rejects.toMatchObject({ code: 'FLAG_CONFLICT' });
|
|
258
|
+
expect(mockGetGitDiff).not.toHaveBeenCalled();
|
|
259
|
+
expect(mockGetGitBranchDiff).not.toHaveBeenCalled();
|
|
260
|
+
expect(mockGetGitDiffRange).not.toHaveBeenCalled();
|
|
261
|
+
expect(mockGetDefaultBranch).not.toHaveBeenCalled();
|
|
262
|
+
});
|
|
263
|
+
it('--branch + --diff throws a conflict error naming both flags before any git work', async () => {
|
|
264
|
+
await expect(getDiffForReview({ branch: true, diff: 'HEAD^..HEAD' }, config, '/tmp', 'Lint')).rejects.toThrow(/--branch.*--diff/);
|
|
265
|
+
expect(mockGetGitDiff).not.toHaveBeenCalled();
|
|
266
|
+
expect(mockGetGitBranchDiff).not.toHaveBeenCalled();
|
|
267
|
+
expect(mockGetGitDiffRange).not.toHaveBeenCalled();
|
|
268
|
+
expect(mockGetDefaultBranch).not.toHaveBeenCalled();
|
|
269
|
+
});
|
|
270
|
+
it('--base + --staged throws a conflict error (base implies branch scope)', async () => {
|
|
271
|
+
await expect(getDiffForReview({ base: 'main', staged: true }, config, '/tmp', 'Lint')).rejects.toThrow(/--base.*--staged/);
|
|
272
|
+
expect(mockGetGitBranchDiff).not.toHaveBeenCalled();
|
|
273
|
+
});
|
|
274
|
+
it('--base + --diff throws a conflict error before any git work (Greptile on #2098)', async () => {
|
|
275
|
+
await expect(getDiffForReview({ base: 'main', diff: 'HEAD^..HEAD' }, config, '/tmp', 'Lint')).rejects.toThrow(/--base.*--diff/);
|
|
276
|
+
expect(mockGetGitBranchDiff).not.toHaveBeenCalled();
|
|
277
|
+
expect(mockGetGitDiffRange).not.toHaveBeenCalled();
|
|
278
|
+
expect(mockGetDefaultBranch).not.toHaveBeenCalled();
|
|
279
|
+
});
|
|
280
|
+
it('rejects a --base value with a leading dash (flag-injection guard)', async () => {
|
|
281
|
+
await expect(getDiffForReview({ base: '--no-index' }, config, '/tmp', 'Lint')).rejects.toThrow(/git-flag injection/);
|
|
282
|
+
expect(mockGetGitBranchDiff).not.toHaveBeenCalled();
|
|
283
|
+
});
|
|
284
|
+
it('rejects an empty/whitespace --base value', async () => {
|
|
285
|
+
await expect(getDiffForReview({ base: ' ' }, config, '/tmp', 'Lint')).rejects.toThrow(/Empty base branch/);
|
|
286
|
+
expect(mockGetGitBranchDiff).not.toHaveBeenCalled();
|
|
287
|
+
});
|
|
288
|
+
it('returns null with the existing no-changes warn when the forced branch diff is empty', async () => {
|
|
289
|
+
mockGetGitBranchDiff.mockReturnValue('');
|
|
290
|
+
const result = await getDiffForReview({ branch: true }, config, '/tmp', 'Lint');
|
|
291
|
+
expect(result).toBeNull();
|
|
292
|
+
const warned = mockLog.warn.mock.calls.find((c) => String(c[1]).includes('No changes detected'));
|
|
293
|
+
expect(warned).toBeDefined();
|
|
294
|
+
});
|
|
295
|
+
it('lets getGitBranchDiff errors bubble on the forced path', async () => {
|
|
296
|
+
mockGetGitBranchDiff.mockImplementation(() => {
|
|
297
|
+
// totem-context: throw inside a vitest mock to prove the forced path does NOT swallow getGitBranchDiff failures (its TotemGitError carries the actionable fetch hint); sentinel message is test-only
|
|
298
|
+
throw new Error('fatal: bad revision');
|
|
299
|
+
});
|
|
300
|
+
await expect(getDiffForReview({ branch: true }, config, '/tmp', 'Lint')).rejects.toThrow(/bad revision/);
|
|
301
|
+
});
|
|
302
|
+
});
|
|
303
|
+
// ─── getDiffForReview narrow-scope warning (#2090) ───────
|
|
304
|
+
describe('getDiffForReview narrow-scope warning (#2090)', () => {
|
|
305
|
+
const config = { ignorePatterns: [] };
|
|
306
|
+
const NARROW_SCOPE_RE = /pre-push gate checks the full branch/;
|
|
307
|
+
function findNarrowScopeWarning() {
|
|
308
|
+
return mockLog.warn.mock.calls.find((c) => NARROW_SCOPE_RE.test(String(c[1])));
|
|
309
|
+
}
|
|
310
|
+
beforeEach(() => {
|
|
311
|
+
mockGetGitDiffRange.mockReset();
|
|
312
|
+
mockGetGitDiff.mockReset();
|
|
313
|
+
mockGetGitBranchDiff.mockReset();
|
|
314
|
+
mockGetDefaultBranch.mockClear();
|
|
315
|
+
mockLog.info.mockClear();
|
|
316
|
+
mockLog.warn.mockClear();
|
|
317
|
+
});
|
|
318
|
+
it('warns with the set difference — overlap files are not double-counted', async () => {
|
|
319
|
+
mockGetGitDiff.mockReturnValue(diffFor('A.ts', 'B.ts'));
|
|
320
|
+
mockGetGitBranchDiff.mockReturnValue(diffFor('B.ts', 'C.ts', 'D.ts'));
|
|
321
|
+
const result = await getDiffForReview({ warnNarrowScope: true }, config, '/tmp', 'Lint');
|
|
322
|
+
expect(result).not.toBeNull();
|
|
323
|
+
expect(result.source).toBe('uncommitted');
|
|
324
|
+
const warning = findNarrowScopeWarning();
|
|
325
|
+
expect(warning).toBeDefined();
|
|
326
|
+
// B.ts overlaps both scopes — N must be 2 (C.ts, D.ts), not 3.
|
|
327
|
+
expect(warning[1]).toBe('Linting uncommitted changes only — the pre-push gate checks the full branch (2 more file(s)). Lint a clean tree or use `totem lint --branch` to match.');
|
|
328
|
+
});
|
|
329
|
+
it('computes N from the post-ignore-filter branch diff (ignored files excluded)', async () => {
|
|
330
|
+
const cfgWithIgnores = { ignorePatterns: ['package-lock.json'] };
|
|
331
|
+
mockGetGitDiff.mockReturnValue(diffFor('A.ts'));
|
|
332
|
+
mockGetGitBranchDiff.mockReturnValue(diffFor('B.ts', 'package-lock.json'));
|
|
333
|
+
await getDiffForReview({ warnNarrowScope: true }, cfgWithIgnores, '/tmp', 'Lint');
|
|
334
|
+
const warning = findNarrowScopeWarning();
|
|
335
|
+
expect(warning).toBeDefined();
|
|
336
|
+
// Raw --name-only would say 2; the gate-honest post-filter count is 1.
|
|
337
|
+
expect(warning[1]).toContain('(1 more file(s))');
|
|
338
|
+
});
|
|
339
|
+
it('staged-mode warning opens with "Linting staged changes only"', async () => {
|
|
340
|
+
mockGetGitDiff.mockReturnValue(diffFor('A.ts'));
|
|
341
|
+
mockGetGitBranchDiff.mockReturnValue(diffFor('A.ts', 'B.ts'));
|
|
342
|
+
const result = await getDiffForReview({ staged: true, warnNarrowScope: true }, config, '/tmp', 'Lint');
|
|
343
|
+
expect(result.source).toBe('staged');
|
|
344
|
+
const warning = findNarrowScopeWarning();
|
|
345
|
+
expect(warning).toBeDefined();
|
|
346
|
+
expect(String(warning[1]).startsWith('Linting staged changes only —')).toBe(true);
|
|
347
|
+
});
|
|
348
|
+
it('does not warn when the set difference is empty', async () => {
|
|
349
|
+
mockGetGitDiff.mockReturnValue(diffFor('A.ts', 'B.ts'));
|
|
350
|
+
mockGetGitBranchDiff.mockReturnValue(diffFor('A.ts'));
|
|
351
|
+
await getDiffForReview({ warnNarrowScope: true }, config, '/tmp', 'Lint');
|
|
352
|
+
expect(findNarrowScopeWarning()).toBeUndefined();
|
|
353
|
+
});
|
|
354
|
+
it('does not warn when the source resolves to branch-vs-base (auto-fallback)', async () => {
|
|
355
|
+
mockGetGitDiff.mockReturnValue('');
|
|
356
|
+
mockGetGitBranchDiff.mockReturnValue(diffFor('A.ts'));
|
|
357
|
+
const result = await getDiffForReview({ warnNarrowScope: true }, config, '/tmp', 'Lint');
|
|
358
|
+
expect(result.source).toBe('branch-vs-base');
|
|
359
|
+
expect(findNarrowScopeWarning()).toBeUndefined();
|
|
360
|
+
// Branch diff was computed once for the scope itself — never a second
|
|
361
|
+
// time for the warning.
|
|
362
|
+
expect(mockGetGitBranchDiff).toHaveBeenCalledTimes(1);
|
|
363
|
+
});
|
|
364
|
+
it('does not warn when the source is explicit-range', async () => {
|
|
365
|
+
mockGetGitDiffRange.mockReturnValue(diffFor('A.ts'));
|
|
366
|
+
const result = await getDiffForReview({ diff: 'HEAD^..HEAD', warnNarrowScope: true }, config, '/tmp', 'Lint');
|
|
367
|
+
expect(result.source).toBe('explicit-range');
|
|
368
|
+
expect(findNarrowScopeWarning()).toBeUndefined();
|
|
369
|
+
expect(mockGetGitBranchDiff).not.toHaveBeenCalled();
|
|
370
|
+
});
|
|
371
|
+
it('does no branch-diff work and never warns when warnNarrowScope is unset (review path)', async () => {
|
|
372
|
+
mockGetGitDiff.mockReturnValue(diffFor('A.ts'));
|
|
373
|
+
await getDiffForReview({}, config, '/tmp', 'Review');
|
|
374
|
+
expect(findNarrowScopeWarning()).toBeUndefined();
|
|
375
|
+
expect(mockGetGitBranchDiff).not.toHaveBeenCalled();
|
|
376
|
+
});
|
|
377
|
+
it('a throw inside the warning computation leaves the result identical to the no-warning case', async () => {
|
|
378
|
+
mockGetGitDiff.mockReturnValue(diffFor('A.ts'));
|
|
379
|
+
mockGetGitBranchDiff.mockImplementation(() => {
|
|
380
|
+
// totem-context: throw inside a vitest mock simulating a git failure (detached HEAD / no base) to prove the advisory is non-fatal per the Tenet-4 silent-skip row; sentinel message is test-only
|
|
381
|
+
throw new Error('fatal: no merge base');
|
|
382
|
+
});
|
|
383
|
+
const withFailure = await getDiffForReview({ warnNarrowScope: true }, config, '/tmp', 'Lint');
|
|
384
|
+
mockGetGitBranchDiff.mockReset();
|
|
385
|
+
mockLog.warn.mockClear();
|
|
386
|
+
const baseline = await getDiffForReview({}, config, '/tmp', 'Lint');
|
|
387
|
+
expect(withFailure).toEqual(baseline);
|
|
388
|
+
expect(withFailure.source).toBe('uncommitted');
|
|
389
|
+
expect(findNarrowScopeWarning()).toBeUndefined();
|
|
390
|
+
});
|
|
391
|
+
});
|
|
186
392
|
//# sourceMappingURL=git.test.js.map
|
package/dist/git.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.test.js","sourceRoot":"","sources":["../src/git.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"git.test.js","sourceRoot":"","sources":["../src/git.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -201,6 +201,8 @@ program
|
|
|
201
201
|
.option('--out <path>', 'Write output to a file instead of stdout')
|
|
202
202
|
.option('--format <format>', 'Output format: text (default), sarif, or json')
|
|
203
203
|
.option('--staged', 'Lint only staged changes (default: all uncommitted)')
|
|
204
|
+
.option('--branch', 'Force the branch-vs-base diff scope the pre-push gate checks, regardless of working-tree state (mutually exclusive with --staged)')
|
|
205
|
+
.option('--base <ref>', 'Base branch for the push-gate scope (implies --branch; resolved as origin/<ref>...HEAD, else local <ref>)')
|
|
204
206
|
.option('--pr-comment [number]', 'Post a summary comment on a PR (auto-infers number in GitHub Actions)')
|
|
205
207
|
.option('--timeout-mode <mode>', 'Regex timeout mode: strict (default, fail CI on timeout) or lenient (skip timing-out rules with warning)')
|
|
206
208
|
.option('--ast-parse-mode <mode>', 'AST parse failure mode: strict (default, fail CI on parse error) or lenient (skip all AST rules with warning). Env: TOTEM_LINT_AST_PARSE_MODE. Operator escape for mmnto-ai/totem#1786 gap.')
|
|
@@ -242,6 +244,8 @@ const reviewOptions = (cmd) => cmd
|
|
|
242
244
|
.option('--fresh', 'Bypass cache and force a fresh LLM call (ignores cached responses)')
|
|
243
245
|
.option('--staged', 'Review only staged changes (default: all uncommitted)')
|
|
244
246
|
.option('--diff <ref-range>', 'Review an explicit git diff range (e.g. "HEAD^..HEAD" or "main...feature"). Bypasses the implicit working-tree → staged → branch-vs-base fallback.')
|
|
247
|
+
.option('--branch', 'Force the branch-vs-base diff scope the pre-push gate checks, regardless of working-tree state (mutually exclusive with --staged and --diff)')
|
|
248
|
+
.option('--base <ref>', 'Base branch for the push-gate scope (implies --branch; resolved as origin/<ref>...HEAD, else local <ref>)')
|
|
245
249
|
.option('--deterministic', 'REMOVED — use `totem lint` instead', false)
|
|
246
250
|
.option('--format <format>', 'REMOVED — use `totem lint --format` instead')
|
|
247
251
|
.option('--mode <mode>', 'Review mode: standard (default, with Totem knowledge) or structural (context-blind paranoia)')
|
|
@@ -254,10 +258,12 @@ const reviewOptions = (cmd) => cmd
|
|
|
254
258
|
.option('--no-history', 'Pattern-history overlay (effective only with --estimate). On by default; pass --no-history to skip the overlay even when .totem/recurrence-stats.json is present. No effect on the LLM review path.')
|
|
255
259
|
.addHelpText('after', [
|
|
256
260
|
'',
|
|
257
|
-
'Diff resolution (when --diff
|
|
261
|
+
'Diff resolution (when --diff and --branch/--base are omitted):',
|
|
258
262
|
' 1. --staged → staged-only diff',
|
|
259
263
|
' 2. (default) → working-tree diff (all uncommitted)',
|
|
260
264
|
' 3. (fallback) → branch-vs-base diff when 1/2 produce nothing',
|
|
265
|
+
'--branch (or --base <ref>) forces scope 3 — the exact diff the pre-push',
|
|
266
|
+
'gate checks — regardless of working-tree state (mmnto-ai/totem#2091).',
|
|
261
267
|
`The chosen path is logged to stderr; large diffs (>${REVIEW_DIFF_TRUNCATION_THRESHOLD} chars)`,
|
|
262
268
|
'trigger an explicit truncation warning before the LLM call.',
|
|
263
269
|
'',
|
|
@@ -287,6 +293,8 @@ async function runReview(opts) {
|
|
|
287
293
|
await lintCommand({
|
|
288
294
|
format: opts.format ?? 'text',
|
|
289
295
|
staged: opts.staged,
|
|
296
|
+
branch: opts.branch,
|
|
297
|
+
base: opts.base,
|
|
290
298
|
out: opts.out,
|
|
291
299
|
});
|
|
292
300
|
return;
|