@hominis/fireforge 0.45.0 → 0.46.1
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/CHANGELOG.md +409 -446
- package/dist/bin/fireforge.d.ts +1 -1
- package/dist/bin/fireforge.js +21 -15
- package/dist/build-info.json +4 -4
- package/dist/src/cli-usage-error.d.ts +46 -0
- package/dist/src/cli-usage-error.js +81 -0
- package/dist/src/cli.d.ts +7 -2
- package/dist/src/cli.js +47 -47
- package/dist/src/commands/bootstrap-checks.js +2 -1
- package/dist/src/commands/bootstrap.js +3 -4
- package/dist/src/commands/build.js +27 -17
- package/dist/src/commands/config.js +9 -9
- package/dist/src/commands/destructive-decision.d.ts +19 -0
- package/dist/src/commands/destructive-decision.js +31 -0
- package/dist/src/commands/discard.js +5 -5
- package/dist/src/commands/doctor-check-core.d.ts +4 -10
- package/dist/src/commands/doctor-check-core.js +0 -8
- package/dist/src/commands/doctor-external-toolchains.js +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.d.ts +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.js +20 -20
- package/dist/src/commands/doctor-furnace-jar.d.ts +1 -1
- package/dist/src/commands/doctor-furnace-jar.js +1 -1
- package/dist/src/commands/doctor-furnace.js +22 -22
- package/dist/src/commands/doctor-orphaned-harness.d.ts +10 -17
- package/dist/src/commands/doctor-orphaned-harness.js +14 -23
- package/dist/src/commands/doctor-patch-manifest.d.ts +2 -1
- package/dist/src/commands/doctor-patch-manifest.js +7 -6
- package/dist/src/commands/doctor-post-rebase-audit.js +3 -3
- package/dist/src/commands/doctor-source-pin.d.ts +12 -12
- package/dist/src/commands/doctor-source-pin.js +14 -14
- package/dist/src/commands/doctor-working-tree.d.ts +3 -3
- package/dist/src/commands/doctor-working-tree.js +3 -3
- package/dist/src/commands/doctor.d.ts +3 -1
- package/dist/src/commands/doctor.js +15 -16
- package/dist/src/commands/download.js +50 -37
- package/dist/src/commands/export-all.js +29 -12
- package/dist/src/commands/export-flow.d.ts +5 -5
- package/dist/src/commands/export-flow.js +29 -59
- package/dist/src/commands/export-placement-conflicts.d.ts +3 -3
- package/dist/src/commands/export-placement-conflicts.js +12 -12
- package/dist/src/commands/export-placement-gate.d.ts +2 -2
- package/dist/src/commands/export-placement-gate.js +7 -13
- package/dist/src/commands/export-placement-policy.d.ts +1 -1
- package/dist/src/commands/export-placement-policy.js +4 -6
- package/dist/src/commands/export-shared.d.ts +51 -32
- package/dist/src/commands/export-shared.js +17 -32
- package/dist/src/commands/export.js +14 -5
- package/dist/src/commands/furnace/apply.js +16 -16
- package/dist/src/commands/furnace/authoring-config.d.ts +13 -0
- package/dist/src/commands/furnace/authoring-config.js +19 -0
- package/dist/src/commands/furnace/chrome-doc-remove.d.ts +1 -1
- package/dist/src/commands/furnace/chrome-doc-remove.js +2 -2
- package/dist/src/commands/furnace/chrome-doc-templates.d.ts +14 -14
- package/dist/src/commands/furnace/chrome-doc-templates.js +17 -17
- package/dist/src/commands/furnace/chrome-doc-tests.d.ts +2 -2
- package/dist/src/commands/furnace/chrome-doc-tests.js +4 -4
- package/dist/src/commands/furnace/chrome-doc.d.ts +8 -8
- package/dist/src/commands/furnace/chrome-doc.js +18 -18
- package/dist/src/commands/furnace/create-browser-test.d.ts +1 -1
- package/dist/src/commands/furnace/create-browser-test.js +7 -12
- package/dist/src/commands/furnace/create-dry-run.d.ts +4 -4
- package/dist/src/commands/furnace/create-dry-run.js +6 -9
- package/dist/src/commands/furnace/create-features.d.ts +2 -2
- package/dist/src/commands/furnace/create-features.js +2 -2
- package/dist/src/commands/furnace/create-mochikit.d.ts +4 -4
- package/dist/src/commands/furnace/create-mochikit.js +7 -7
- package/dist/src/commands/furnace/create-templates.d.ts +31 -15
- package/dist/src/commands/furnace/create-templates.js +20 -19
- package/dist/src/commands/furnace/create-xpcshell.d.ts +5 -5
- package/dist/src/commands/furnace/create-xpcshell.js +8 -8
- package/dist/src/commands/furnace/create.d.ts +1 -1
- package/dist/src/commands/furnace/create.js +35 -29
- package/dist/src/commands/furnace/deploy.js +15 -6
- package/dist/src/commands/furnace/diff.js +7 -7
- package/dist/src/commands/furnace/index.js +1 -1
- package/dist/src/commands/furnace/init.js +17 -16
- package/dist/src/commands/furnace/list.js +2 -2
- package/dist/src/commands/furnace/override.d.ts +1 -1
- package/dist/src/commands/furnace/override.js +43 -34
- package/dist/src/commands/furnace/preview.js +17 -17
- package/dist/src/commands/furnace/refresh.js +15 -7
- package/dist/src/commands/furnace/remove-mutations.d.ts +9 -10
- package/dist/src/commands/furnace/remove-mutations.js +19 -19
- package/dist/src/commands/furnace/remove-state.d.ts +1 -1
- package/dist/src/commands/furnace/remove-state.js +1 -1
- package/dist/src/commands/furnace/remove.js +4 -8
- package/dist/src/commands/furnace/rename-browser-test.js +10 -15
- package/dist/src/commands/furnace/rename-xpcshell.d.ts +2 -2
- package/dist/src/commands/furnace/rename-xpcshell.js +3 -3
- package/dist/src/commands/furnace/rename.js +36 -36
- package/dist/src/commands/furnace/scan.js +3 -3
- package/dist/src/commands/furnace/status.js +19 -16
- package/dist/src/commands/furnace/sync.js +6 -6
- package/dist/src/commands/furnace/test-file-name.d.ts +28 -0
- package/dist/src/commands/furnace/test-file-name.js +39 -0
- package/dist/src/commands/furnace/validate.js +11 -12
- package/dist/src/commands/furnace/validation-output.d.ts +21 -9
- package/dist/src/commands/furnace/validation-output.js +3 -8
- package/dist/src/commands/import.js +22 -29
- package/dist/src/commands/lint-per-patch.d.ts +2 -2
- package/dist/src/commands/lint-per-patch.js +27 -12
- package/dist/src/commands/lint-per-run-checkjs.d.ts +14 -15
- package/dist/src/commands/lint-per-run-checkjs.js +14 -15
- package/dist/src/commands/lint-report.d.ts +3 -3
- package/dist/src/commands/lint-report.js +4 -4
- package/dist/src/commands/lint.d.ts +5 -4
- package/dist/src/commands/lint.js +36 -36
- package/dist/src/commands/manifest.d.ts +4 -4
- package/dist/src/commands/manifest.js +1 -1
- package/dist/src/commands/package.js +4 -6
- package/dist/src/commands/patch/compact.d.ts +2 -2
- package/dist/src/commands/patch/compact.js +19 -20
- package/dist/src/commands/patch/delete.d.ts +1 -1
- package/dist/src/commands/patch/delete.js +23 -33
- package/dist/src/commands/patch/entry-projection.d.ts +13 -0
- package/dist/src/commands/patch/entry-projection.js +24 -0
- package/dist/src/commands/patch/lint-ignore.d.ts +3 -12
- package/dist/src/commands/patch/lint-ignore.js +33 -44
- package/dist/src/commands/patch/move-files-create.d.ts +2 -2
- package/dist/src/commands/patch/move-files-create.js +29 -15
- package/dist/src/commands/patch/move-files-into.d.ts +2 -2
- package/dist/src/commands/patch/move-files-into.js +41 -37
- package/dist/src/commands/patch/move-files.js +5 -14
- package/dist/src/commands/patch/patch-context.d.ts +1 -1
- package/dist/src/commands/patch/rename.d.ts +4 -4
- package/dist/src/commands/patch/rename.js +35 -49
- package/dist/src/commands/patch/reorder.js +35 -48
- package/dist/src/commands/patch/split-plan.d.ts +7 -8
- package/dist/src/commands/patch/split-plan.js +10 -13
- package/dist/src/commands/patch/split.d.ts +2 -2
- package/dist/src/commands/patch/split.js +50 -48
- package/dist/src/commands/patch/staged-dependency-validate.d.ts +1 -1
- package/dist/src/commands/patch/staged-dependency-validate.js +3 -3
- package/dist/src/commands/patch/staged-dependency.d.ts +1 -1
- package/dist/src/commands/patch/staged-dependency.js +22 -28
- package/dist/src/commands/patch/tier.d.ts +2 -2
- package/dist/src/commands/patch/tier.js +20 -30
- package/dist/src/commands/patch-rename-map.d.ts +19 -0
- package/dist/src/commands/patch-rename-map.js +36 -0
- package/dist/src/commands/pending-resolution.d.ts +15 -0
- package/dist/src/commands/pending-resolution.js +25 -0
- package/dist/src/commands/re-export-adjacent.d.ts +25 -3
- package/dist/src/commands/re-export-adjacent.js +40 -24
- package/dist/src/commands/re-export-bulk-scan.d.ts +3 -3
- package/dist/src/commands/re-export-bulk-scan.js +23 -27
- package/dist/src/commands/re-export-drift.d.ts +10 -10
- package/dist/src/commands/re-export-drift.js +33 -33
- package/dist/src/commands/re-export-files.d.ts +2 -3
- package/dist/src/commands/re-export-files.js +52 -44
- package/dist/src/commands/re-export-lint.d.ts +29 -30
- package/dist/src/commands/re-export-lint.js +36 -29
- package/dist/src/commands/re-export-options.d.ts +1 -1
- package/dist/src/commands/re-export-options.js +1 -1
- package/dist/src/commands/re-export-register.d.ts +1 -1
- package/dist/src/commands/re-export-register.js +1 -1
- package/dist/src/commands/re-export-scan.d.ts +1 -1
- package/dist/src/commands/re-export-scan.js +12 -9
- package/dist/src/commands/re-export-single.d.ts +23 -4
- package/dist/src/commands/re-export-single.js +39 -31
- package/dist/src/commands/re-export.js +35 -17
- package/dist/src/commands/rebase/abort.js +9 -14
- package/dist/src/commands/rebase/continue.js +20 -19
- package/dist/src/commands/rebase/index.d.ts +1 -1
- package/dist/src/commands/rebase/index.js +5 -5
- package/dist/src/commands/rebase/patch-loop.d.ts +2 -2
- package/dist/src/commands/rebase/patch-loop.js +20 -24
- package/dist/src/commands/register.js +5 -5
- package/dist/src/commands/reset.js +1 -1
- package/dist/src/commands/resolve.d.ts +2 -2
- package/dist/src/commands/resolve.js +21 -13
- package/dist/src/commands/run.d.ts +0 -13
- package/dist/src/commands/run.js +38 -51
- package/dist/src/commands/setup-support.d.ts +16 -4
- package/dist/src/commands/setup-support.js +20 -20
- package/dist/src/commands/setup.js +4 -10
- package/dist/src/commands/source.js +9 -2
- package/dist/src/commands/status-check.d.ts +3 -3
- package/dist/src/commands/status-check.js +6 -6
- package/dist/src/commands/status-json.d.ts +14 -13
- package/dist/src/commands/status-json.js +9 -8
- package/dist/src/commands/status-output.d.ts +3 -3
- package/dist/src/commands/status-output.js +5 -5
- package/dist/src/commands/status-ownership.d.ts +3 -3
- package/dist/src/commands/status-ownership.js +3 -3
- package/dist/src/commands/status.js +25 -26
- package/dist/src/commands/test-build-phase.d.ts +3 -3
- package/dist/src/commands/test-build-phase.js +48 -24
- package/dist/src/commands/test-diagnose.d.ts +1 -1
- package/dist/src/commands/test-diagnose.js +20 -20
- package/dist/src/commands/test-modes.d.ts +4 -4
- package/dist/src/commands/test-modes.js +4 -5
- package/dist/src/commands/test-register.js +5 -3
- package/dist/src/commands/test-run.d.ts +11 -11
- package/dist/src/commands/test-run.js +40 -33
- package/dist/src/commands/test-stale-gate.d.ts +12 -12
- package/dist/src/commands/test-stale-gate.js +17 -17
- package/dist/src/commands/test-verdict.d.ts +19 -5
- package/dist/src/commands/test-verdict.js +26 -11
- package/dist/src/commands/test.d.ts +3 -3
- package/dist/src/commands/test.js +73 -36
- package/dist/src/commands/token-coverage.js +3 -3
- package/dist/src/commands/token-list.d.ts +26 -0
- package/dist/src/commands/token-list.js +153 -0
- package/dist/src/commands/token.js +26 -10
- package/dist/src/commands/tree.js +26 -21
- package/dist/src/commands/typecheck.d.ts +6 -6
- package/dist/src/commands/typecheck.js +16 -16
- package/dist/src/commands/verify.d.ts +3 -3
- package/dist/src/commands/verify.js +10 -10
- package/dist/src/commands/watch.js +11 -11
- package/dist/src/commands/wire.js +17 -16
- package/dist/src/core/ast-utils.d.ts +7 -7
- package/dist/src/core/ast-utils.js +8 -8
- package/dist/src/core/branding.d.ts +5 -12
- package/dist/src/core/branding.js +6 -5
- package/dist/src/core/browser-wire.d.ts +1 -1
- package/dist/src/core/browser-wire.js +10 -7
- package/dist/src/core/build-audit-platform.d.ts +32 -3
- package/dist/src/core/build-audit-platform.js +153 -13
- package/dist/src/core/build-audit-registration.d.ts +5 -5
- package/dist/src/core/build-audit-registration.js +10 -9
- package/dist/src/core/build-audit-resolve.d.ts +5 -5
- package/dist/src/core/build-audit-resolve.js +6 -6
- package/dist/src/core/build-audit-skip.d.ts +57 -0
- package/dist/src/core/build-audit-skip.js +112 -0
- package/dist/src/core/build-audit-transforms.d.ts +2 -2
- package/dist/src/core/build-audit-transforms.js +3 -3
- package/dist/src/core/build-audit.d.ts +21 -8
- package/dist/src/core/build-audit.js +142 -40
- package/dist/src/core/build-baseline-types.d.ts +19 -18
- package/dist/src/core/build-baseline-types.js +1 -1
- package/dist/src/core/build-baseline.d.ts +48 -31
- package/dist/src/core/build-baseline.js +20 -43
- package/dist/src/core/build-jar-escalation.d.ts +8 -8
- package/dist/src/core/build-jar-escalation.js +18 -17
- package/dist/src/core/build-overwrite-guard.d.ts +4 -4
- package/dist/src/core/build-overwrite-guard.js +14 -14
- package/dist/src/core/build-prepare.d.ts +4 -12
- package/dist/src/core/build-prepare.js +22 -26
- package/dist/src/core/config-mutate.js +4 -4
- package/dist/src/core/config-paths.d.ts +2 -6
- package/dist/src/core/config-paths.js +4 -2
- package/dist/src/core/config-state.d.ts +0 -6
- package/dist/src/core/config-state.js +3 -21
- package/dist/src/core/config-validate-build-audit.d.ts +8 -0
- package/dist/src/core/config-validate-build-audit.js +80 -0
- package/dist/src/core/config-validate-file-size.d.ts +1 -1
- package/dist/src/core/config-validate-file-size.js +3 -3
- package/dist/src/core/config-validate-patch-policy.d.ts +2 -2
- package/dist/src/core/config-validate-patch-policy.js +3 -3
- package/dist/src/core/config-validate-test-toolchains.d.ts +2 -2
- package/dist/src/core/config-validate-test-toolchains.js +4 -5
- package/dist/src/core/config-validate.js +22 -12
- package/dist/src/core/config.d.ts +12 -12
- package/dist/src/core/config.js +21 -25
- package/dist/src/core/coverage-extend.d.ts +16 -16
- package/dist/src/core/coverage-extend.js +20 -20
- package/dist/src/core/destructive.d.ts +14 -14
- package/dist/src/core/destructive.js +9 -9
- package/dist/src/core/diff-hunks.d.ts +2 -2
- package/dist/src/core/diff-hunks.js +7 -7
- package/dist/src/core/discard-baseline.d.ts +10 -10
- package/dist/src/core/discard-baseline.js +22 -23
- package/dist/src/core/display-state.d.ts +11 -11
- package/dist/src/core/display-state.js +12 -12
- package/dist/src/core/engine-changes.d.ts +2 -2
- package/dist/src/core/engine-changes.js +2 -2
- package/dist/src/core/engine-precondition.d.ts +5 -13
- package/dist/src/core/engine-precondition.js +5 -10
- package/dist/src/core/engine-session-lock.d.ts +18 -18
- package/dist/src/core/engine-session-lock.js +50 -54
- package/dist/src/core/export-moved-code-shape.d.ts +7 -7
- package/dist/src/core/export-moved-code-shape.js +10 -10
- package/dist/src/core/file-lock-owner.d.ts +103 -0
- package/dist/src/core/file-lock-owner.js +259 -0
- package/dist/src/core/file-lock.d.ts +14 -19
- package/dist/src/core/file-lock.js +90 -128
- package/dist/src/core/firefox-cache.d.ts +13 -1
- package/dist/src/core/firefox-cache.js +61 -36
- package/dist/src/core/firefox-download.d.ts +15 -0
- package/dist/src/core/firefox-download.js +38 -22
- package/dist/src/core/firefox-extract.d.ts +8 -7
- package/dist/src/core/firefox-extract.js +45 -27
- package/dist/src/core/firefox.d.ts +34 -36
- package/dist/src/core/firefox.js +13 -44
- package/dist/src/core/furnace-apply-dry-run.d.ts +1 -6
- package/dist/src/core/furnace-apply-dry-run.js +2 -8
- package/dist/src/core/furnace-apply-ftl.d.ts +5 -5
- package/dist/src/core/furnace-apply-ftl.js +8 -8
- package/dist/src/core/furnace-apply-helpers.d.ts +9 -20
- package/dist/src/core/furnace-apply-helpers.js +28 -39
- package/dist/src/core/furnace-apply-output.js +1 -1
- package/dist/src/core/furnace-apply-overwrite-warn.d.ts +9 -9
- package/dist/src/core/furnace-apply-overwrite-warn.js +13 -11
- package/dist/src/core/furnace-apply-undeploy-actions.d.ts +1 -1
- package/dist/src/core/furnace-apply-undeploy-actions.js +1 -1
- package/dist/src/core/furnace-apply.d.ts +4 -4
- package/dist/src/core/furnace-apply.js +50 -29
- package/dist/src/core/furnace-checksum-utils.d.ts +5 -5
- package/dist/src/core/furnace-checksum-utils.js +5 -5
- package/dist/src/core/furnace-config-custom.d.ts +1 -1
- package/dist/src/core/furnace-config-custom.js +2 -2
- package/dist/src/core/furnace-config-order.js +1 -1
- package/dist/src/core/furnace-config-tokens.d.ts +3 -3
- package/dist/src/core/furnace-config-tokens.js +3 -3
- package/dist/src/core/furnace-config-validate.js +2 -2
- package/dist/src/core/furnace-config.d.ts +5 -5
- package/dist/src/core/furnace-config.js +40 -53
- package/dist/src/core/furnace-constants.d.ts +6 -6
- package/dist/src/core/furnace-constants.js +9 -8
- package/dist/src/core/furnace-css-fragments.d.ts +6 -6
- package/dist/src/core/furnace-css-fragments.js +11 -11
- package/dist/src/core/furnace-dir-entry.d.ts +20 -0
- package/dist/src/core/furnace-dir-entry.js +21 -0
- package/dist/src/core/furnace-jsconfig.d.ts +7 -7
- package/dist/src/core/furnace-jsconfig.js +22 -20
- package/dist/src/core/furnace-operation.d.ts +22 -19
- package/dist/src/core/furnace-operation.js +38 -34
- package/dist/src/core/furnace-precondition.d.ts +10 -10
- package/dist/src/core/furnace-precondition.js +8 -8
- package/dist/src/core/furnace-refresh.d.ts +18 -6
- package/dist/src/core/furnace-refresh.js +5 -8
- package/dist/src/core/furnace-registration-ast.d.ts +2 -3
- package/dist/src/core/furnace-registration-ast.js +9 -12
- package/dist/src/core/furnace-registration-remove.d.ts +4 -4
- package/dist/src/core/furnace-registration-remove.js +6 -6
- package/dist/src/core/furnace-registration-validate.d.ts +2 -2
- package/dist/src/core/furnace-registration-validate.js +2 -2
- package/dist/src/core/furnace-registration.d.ts +7 -6
- package/dist/src/core/furnace-registration.js +29 -36
- package/dist/src/core/furnace-rollback.d.ts +1 -1
- package/dist/src/core/furnace-rollback.js +5 -5
- package/dist/src/core/furnace-scanner.js +3 -6
- package/dist/src/core/furnace-stale-export.d.ts +17 -16
- package/dist/src/core/furnace-stale-export.js +16 -15
- package/dist/src/core/furnace-staleness.d.ts +2 -2
- package/dist/src/core/furnace-staleness.js +2 -2
- package/dist/src/core/furnace-state-persist.d.ts +12 -12
- package/dist/src/core/furnace-state-persist.js +10 -10
- package/dist/src/core/furnace-step-errors.d.ts +6 -6
- package/dist/src/core/furnace-step-errors.js +6 -6
- package/dist/src/core/furnace-validate-accessibility.js +14 -14
- package/dist/src/core/furnace-validate-compatibility.js +9 -9
- package/dist/src/core/furnace-validate-registration.d.ts +2 -2
- package/dist/src/core/furnace-validate-registration.js +18 -20
- package/dist/src/core/furnace-validate-structure.d.ts +1 -1
- package/dist/src/core/furnace-validate-structure.js +4 -4
- package/dist/src/core/furnace-validate.js +9 -9
- package/dist/src/core/furnace-version-drift.d.ts +5 -5
- package/dist/src/core/furnace-version-drift.js +5 -5
- package/dist/src/core/git-base.d.ts +6 -4
- package/dist/src/core/git-base.js +29 -7
- package/dist/src/core/git-diff-new-file.d.ts +40 -0
- package/dist/src/core/git-diff-new-file.js +119 -0
- package/dist/src/core/git-diff.d.ts +13 -13
- package/dist/src/core/git-diff.js +121 -189
- package/dist/src/core/git-file-ops.d.ts +6 -13
- package/dist/src/core/git-file-ops.js +11 -35
- package/dist/src/core/git-readonly-index.d.ts +12 -14
- package/dist/src/core/git-readonly-index.js +12 -16
- package/dist/src/core/git-status.d.ts +9 -2
- package/dist/src/core/git-status.js +23 -11
- package/dist/src/core/git.d.ts +3 -9
- package/dist/src/core/git.js +28 -57
- package/dist/src/core/harness-orphans.d.ts +17 -17
- package/dist/src/core/harness-orphans.js +28 -27
- package/dist/src/core/history-log.d.ts +19 -0
- package/dist/src/core/history-log.js +29 -0
- package/dist/src/core/license-headers.d.ts +19 -18
- package/dist/src/core/license-headers.js +29 -28
- package/dist/src/core/mach-build-artifacts.d.ts +21 -21
- package/dist/src/core/mach-build-artifacts.js +23 -23
- package/dist/src/core/mach-error-hints.d.ts +5 -10
- package/dist/src/core/mach-error-hints.js +14 -14
- package/dist/src/core/mach-known-noise-filter.d.ts +42 -38
- package/dist/src/core/mach-known-noise-filter.js +57 -56
- package/dist/src/core/mach-mozconfig.d.ts +6 -6
- package/dist/src/core/mach-mozconfig.js +17 -16
- package/dist/src/core/mach-python.d.ts +3 -0
- package/dist/src/core/mach-python.js +13 -7
- package/dist/src/core/mach-resource-shim.d.ts +24 -12
- package/dist/src/core/mach-resource-shim.js +124 -21
- package/dist/src/core/mach.d.ts +59 -73
- package/dist/src/core/mach.js +47 -115
- package/dist/src/core/marionette-port.d.ts +15 -30
- package/dist/src/core/marionette-port.js +46 -89
- package/dist/src/core/marionette-preflight.d.ts +6 -6
- package/dist/src/core/marionette-preflight.js +32 -50
- package/dist/src/core/markdown-table.d.ts +9 -9
- package/dist/src/core/markdown-table.js +14 -14
- package/dist/src/core/mochitest-server-port.d.ts +8 -8
- package/dist/src/core/mochitest-server-port.js +17 -17
- package/dist/src/core/module-resolution-preflight.d.ts +8 -8
- package/dist/src/core/module-resolution-preflight.js +11 -11
- package/dist/src/core/moz-manifest-helpers.d.ts +7 -7
- package/dist/src/core/moz-manifest-helpers.js +7 -7
- package/dist/src/core/moz-manifest-register.d.ts +1 -1
- package/dist/src/core/moz-manifest-register.js +2 -2
- package/dist/src/core/moz-manifest-rules.js +46 -42
- package/dist/src/core/moz-manifest-tokenizers.js +1 -1
- package/dist/src/core/ownership-table.d.ts +5 -5
- package/dist/src/core/ownership-table.js +7 -7
- package/dist/src/core/parser-fallback.d.ts +3 -3
- package/dist/src/core/parser-fallback.js +3 -3
- package/dist/src/core/patch-apply-fuzz.d.ts +5 -5
- package/dist/src/core/patch-apply-fuzz.js +13 -13
- package/dist/src/core/patch-apply.d.ts +13 -14
- package/dist/src/core/patch-apply.js +36 -42
- package/dist/src/core/patch-export-coverage.d.ts +0 -9
- package/dist/src/core/patch-export-coverage.js +1 -30
- package/dist/src/core/patch-export-update.d.ts +21 -4
- package/dist/src/core/patch-export-update.js +7 -6
- package/dist/src/core/patch-export.d.ts +20 -30
- package/dist/src/core/patch-export.js +55 -77
- package/dist/src/core/patch-files.d.ts +0 -4
- package/dist/src/core/patch-files.js +0 -11
- package/dist/src/core/patch-identifier-suggest.d.ts +1 -1
- package/dist/src/core/patch-identifier-suggest.js +4 -4
- package/dist/src/core/patch-lint-binary.d.ts +12 -18
- package/dist/src/core/patch-lint-cache.d.ts +18 -2
- package/dist/src/core/patch-lint-cache.js +16 -19
- package/dist/src/core/patch-lint-checkjs.d.ts +55 -38
- package/dist/src/core/patch-lint-checkjs.js +78 -64
- package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +8 -9
- package/dist/src/core/patch-lint-chrome-jsdoc.js +10 -11
- package/dist/src/core/patch-lint-creators.d.ts +5 -9
- package/dist/src/core/patch-lint-creators.js +3 -3
- package/dist/src/core/patch-lint-cross.d.ts +27 -19
- package/dist/src/core/patch-lint-cross.js +67 -110
- package/dist/src/core/patch-lint-css.d.ts +1 -1
- package/dist/src/core/patch-lint-css.js +15 -11
- package/dist/src/core/patch-lint-diff-tag.d.ts +5 -5
- package/dist/src/core/patch-lint-diff-tag.js +5 -5
- package/dist/src/core/patch-lint-diff.d.ts +4 -4
- package/dist/src/core/patch-lint-diff.js +4 -4
- package/dist/src/core/patch-lint-file-size.d.ts +3 -3
- package/dist/src/core/patch-lint-file-size.js +6 -6
- package/dist/src/core/patch-lint-forward-registration.d.ts +58 -0
- package/dist/src/core/patch-lint-forward-registration.js +210 -0
- package/dist/src/core/patch-lint-jsdoc.d.ts +2 -2
- package/dist/src/core/patch-lint-jsdoc.js +46 -46
- package/dist/src/core/patch-lint-module-registration.d.ts +3 -9
- package/dist/src/core/patch-lint-module-registration.js +1 -1
- package/dist/src/core/patch-lint-mozbuild.d.ts +1 -1
- package/dist/src/core/patch-lint-mozbuild.js +10 -10
- package/dist/src/core/patch-lint-observer.d.ts +3 -3
- package/dist/src/core/patch-lint-observer.js +7 -7
- package/dist/src/core/patch-lint-ownership.d.ts +6 -6
- package/dist/src/core/patch-lint-ownership.js +6 -6
- package/dist/src/core/patch-lint-prettier.d.ts +6 -6
- package/dist/src/core/patch-lint-prettier.js +7 -7
- package/dist/src/core/patch-lint-queue-types.d.ts +60 -0
- package/dist/src/core/patch-lint-queue-types.js +12 -0
- package/dist/src/core/patch-lint-staged-registration.d.ts +61 -0
- package/dist/src/core/patch-lint-staged-registration.js +90 -0
- package/dist/src/core/patch-lint-unmanaged-companion.d.ts +23 -23
- package/dist/src/core/patch-lint-unmanaged-companion.js +26 -26
- package/dist/src/core/patch-lint.d.ts +41 -35
- package/dist/src/core/patch-lint.js +52 -49
- package/dist/src/core/patch-lock.d.ts +1 -1
- package/dist/src/core/patch-lock.js +11 -11
- package/dist/src/core/patch-manifest-consistency.d.ts +7 -7
- package/dist/src/core/patch-manifest-consistency.js +16 -17
- package/dist/src/core/patch-manifest-files-affected.d.ts +1 -1
- package/dist/src/core/patch-manifest-files-affected.js +3 -3
- package/dist/src/core/patch-manifest-io.d.ts +14 -14
- package/dist/src/core/patch-manifest-io.js +35 -34
- package/dist/src/core/patch-manifest-query.d.ts +1 -1
- package/dist/src/core/patch-manifest-query.js +4 -4
- package/dist/src/core/patch-manifest-resolve.d.ts +5 -5
- package/dist/src/core/patch-manifest-resolve.js +7 -7
- package/dist/src/core/patch-manifest-validate.js +3 -3
- package/dist/src/core/patch-manifest.d.ts +2 -2
- package/dist/src/core/patch-manifest.js +2 -2
- package/dist/src/core/patch-parse.d.ts +32 -21
- package/dist/src/core/patch-parse.js +40 -15
- package/dist/src/core/patch-policy.js +15 -27
- package/dist/src/core/patch-registration-refs.d.ts +4 -4
- package/dist/src/core/patch-registration-refs.js +7 -7
- package/dist/src/core/patch-source-metadata.d.ts +1 -3
- package/dist/src/core/patch-source-metadata.js +0 -4
- package/dist/src/core/patch-transform.d.ts +8 -16
- package/dist/src/core/patch-transform.js +13 -23
- package/dist/src/core/process-cpu-time.d.ts +1 -1
- package/dist/src/core/process-cpu-time.js +6 -6
- package/dist/src/core/rebase-session.d.ts +9 -15
- package/dist/src/core/rebase-session.js +13 -25
- package/dist/src/core/register-browser-content.js +3 -2
- package/dist/src/core/register-browser-test.js +2 -1
- package/dist/src/core/register-module.js +2 -1
- package/dist/src/core/register-result.d.ts +1 -1
- package/dist/src/core/register-result.js +1 -1
- package/dist/src/core/register-scaffold.d.ts +2 -2
- package/dist/src/core/register-scaffold.js +8 -7
- package/dist/src/core/register-shared-css.d.ts +3 -3
- package/dist/src/core/register-shared-css.js +6 -5
- package/dist/src/core/register-xpcshell-test.d.ts +2 -2
- package/dist/src/core/register-xpcshell-test.js +2 -2
- package/dist/src/core/run-log-redact.d.ts +38 -0
- package/dist/src/core/run-log-redact.js +69 -0
- package/dist/src/core/run-log.d.ts +21 -10
- package/dist/src/core/run-log.js +76 -27
- package/dist/src/core/shared-ftl.d.ts +2 -2
- package/dist/src/core/shared-ftl.js +6 -6
- package/dist/src/core/signal-critical.d.ts +2 -2
- package/dist/src/core/signal-critical.js +4 -6
- package/dist/src/core/smoke-patterns.d.ts +5 -6
- package/dist/src/core/smoke-patterns.js +15 -20
- package/dist/src/core/state-file.d.ts +15 -4
- package/dist/src/core/state-file.js +14 -1
- package/dist/src/core/status-binary.d.ts +8 -8
- package/dist/src/core/status-binary.js +12 -12
- package/dist/src/core/status-classify.d.ts +17 -17
- package/dist/src/core/status-classify.js +13 -12
- package/dist/src/core/test-changed-prefs.d.ts +12 -12
- package/dist/src/core/test-changed-prefs.js +40 -25
- package/dist/src/core/test-harness-crash.d.ts +39 -39
- package/dist/src/core/test-harness-crash.js +69 -69
- package/dist/src/core/test-harness-output.d.ts +7 -7
- package/dist/src/core/test-harness-output.js +7 -7
- package/dist/src/core/test-harness-verdict-notes.d.ts +13 -14
- package/dist/src/core/test-harness-verdict-notes.js +4 -4
- package/dist/src/core/test-path-scope.d.ts +8 -8
- package/dist/src/core/test-path-scope.js +11 -11
- package/dist/src/core/test-stale-check.d.ts +22 -23
- package/dist/src/core/test-stale-check.js +31 -30
- package/dist/src/core/test-stale-symlink.d.ts +1 -1
- package/dist/src/core/test-stale-symlink.js +1 -1
- package/dist/src/core/test-stall-triage.d.ts +9 -9
- package/dist/src/core/test-stall-triage.js +22 -22
- package/dist/src/core/test-xpcshell-retry.d.ts +26 -7
- package/dist/src/core/test-xpcshell-retry.js +14 -11
- package/dist/src/core/token-category.d.ts +35 -2
- package/dist/src/core/token-category.js +67 -58
- package/dist/src/core/token-coverage.js +4 -5
- package/dist/src/core/token-dark-mode.d.ts +9 -9
- package/dist/src/core/token-dark-mode.js +13 -25
- package/dist/src/core/token-docs.d.ts +1 -1
- package/dist/src/core/token-inventory.d.ts +56 -0
- package/dist/src/core/token-inventory.js +109 -0
- package/dist/src/core/token-manager.d.ts +4 -4
- package/dist/src/core/token-manager.js +22 -22
- package/dist/src/core/token-scaffold.d.ts +4 -4
- package/dist/src/core/token-scaffold.js +4 -4
- package/dist/src/core/token-variant.d.ts +14 -14
- package/dist/src/core/token-variant.js +52 -53
- package/dist/src/core/toolchain-preflight.d.ts +15 -15
- package/dist/src/core/toolchain-preflight.js +23 -23
- package/dist/src/core/tree-cow.d.ts +3 -5
- package/dist/src/core/tree-cow.js +8 -8
- package/dist/src/core/tree-guard.d.ts +3 -3
- package/dist/src/core/tree-guard.js +23 -23
- package/dist/src/core/tree-store.d.ts +15 -15
- package/dist/src/core/tree-store.js +39 -38
- package/dist/src/core/typecheck-shim.d.ts +16 -15
- package/dist/src/core/typecheck-shim.js +26 -25
- package/dist/src/core/typecheck.d.ts +12 -12
- package/dist/src/core/typecheck.js +33 -33
- package/dist/src/core/wire-destroy.d.ts +2 -2
- package/dist/src/core/wire-destroy.js +5 -5
- package/dist/src/core/wire-dom-fragment.d.ts +3 -3
- package/dist/src/core/wire-dom-fragment.js +12 -23
- package/dist/src/core/wire-init.d.ts +2 -2
- package/dist/src/core/wire-init.js +7 -7
- package/dist/src/core/wire-subscript.d.ts +1 -1
- package/dist/src/core/wire-subscript.js +3 -3
- package/dist/src/core/wire-utils.d.ts +9 -9
- package/dist/src/core/wire-utils.js +16 -28
- package/dist/src/core/xpcshell-appdir.d.ts +20 -20
- package/dist/src/core/xpcshell-appdir.js +28 -30
- package/dist/src/core/xpcshell-profile-dir.d.ts +3 -3
- package/dist/src/core/xpcshell-profile-dir.js +7 -7
- package/dist/src/errors/base.d.ts +69 -16
- package/dist/src/errors/base.js +95 -26
- package/dist/src/errors/build.d.ts +6 -6
- package/dist/src/errors/build.js +26 -34
- package/dist/src/errors/codes.d.ts +10 -10
- package/dist/src/errors/codes.js +10 -10
- package/dist/src/errors/config.d.ts +0 -14
- package/dist/src/errors/config.js +13 -34
- package/dist/src/errors/download.d.ts +13 -0
- package/dist/src/errors/download.js +53 -24
- package/dist/src/errors/furnace.d.ts +2 -2
- package/dist/src/errors/furnace.js +8 -9
- package/dist/src/errors/git.d.ts +9 -9
- package/dist/src/errors/git.js +21 -31
- package/dist/src/errors/patch.d.ts +3 -3
- package/dist/src/errors/patch.js +11 -13
- package/dist/src/errors/rebase.d.ts +1 -1
- package/dist/src/errors/rebase.js +8 -8
- package/dist/src/errors/run.d.ts +1 -1
- package/dist/src/errors/run.js +1 -1
- package/dist/src/index.d.ts +4 -4
- package/dist/src/index.js +4 -4
- package/dist/src/types/commands/options.d.ts +155 -200
- package/dist/src/types/commands/patches.d.ts +19 -19
- package/dist/src/types/commands/project.d.ts +3 -3
- package/dist/src/types/config.d.ts +52 -19
- package/dist/src/types/furnace.d.ts +17 -17
- package/dist/src/types/index.d.ts +0 -1
- package/dist/src/types/json.d.ts +3 -3
- package/dist/src/types/json.js +2 -2
- package/dist/src/types/typecheck.d.ts +3 -3
- package/dist/src/utils/assert.d.ts +4 -16
- package/dist/src/utils/assert.js +7 -24
- package/dist/src/utils/build-info.d.ts +6 -6
- package/dist/src/utils/build-info.js +6 -6
- package/dist/src/utils/child-env.d.ts +7 -6
- package/dist/src/utils/child-env.js +5 -5
- package/dist/src/utils/concurrency.d.ts +2 -2
- package/dist/src/utils/concurrency.js +2 -2
- package/dist/src/utils/elapsed.js +10 -1
- package/dist/src/utils/errors.d.ts +8 -8
- package/dist/src/utils/errors.js +8 -8
- package/dist/src/utils/fs.d.ts +1 -1
- package/dist/src/utils/fs.js +15 -20
- package/dist/src/utils/hash.d.ts +12 -0
- package/dist/src/utils/hash.js +16 -0
- package/dist/src/utils/line-dispatch.d.ts +15 -0
- package/dist/src/utils/line-dispatch.js +48 -0
- package/dist/src/utils/logger.d.ts +4 -4
- package/dist/src/utils/logger.js +11 -11
- package/dist/src/utils/machine-output.js +2 -2
- package/dist/src/utils/options.d.ts +14 -20
- package/dist/src/utils/options.js +26 -27
- package/dist/src/utils/package-root.js +5 -14
- package/dist/src/utils/paths.d.ts +4 -4
- package/dist/src/utils/paths.js +4 -4
- package/dist/src/utils/platform.d.ts +0 -4
- package/dist/src/utils/process-group.d.ts +10 -9
- package/dist/src/utils/process-group.js +37 -36
- package/dist/src/utils/process.d.ts +70 -55
- package/dist/src/utils/process.js +129 -179
- package/dist/src/utils/ps-duration.d.ts +4 -4
- package/dist/src/utils/ps-duration.js +9 -9
- package/dist/src/utils/regex.d.ts +4 -4
- package/dist/src/utils/regex.js +7 -7
- package/dist/src/utils/sleep.d.ts +26 -0
- package/dist/src/utils/sleep.js +31 -0
- package/dist/src/utils/stdio-drain.d.ts +7 -7
- package/dist/src/utils/stdio-drain.js +8 -8
- package/dist/src/utils/validation.d.ts +12 -49
- package/dist/src/utils/validation.js +26 -36
- package/docs/README.md +2 -2
- package/docs/configuration.md +163 -69
- package/docs/exit-codes.md +66 -49
- package/docs/furnace.md +20 -19
- package/docs/lifecycle-invariants.md +414 -247
- package/docs/machine-output.md +58 -34
- package/docs/patch-workflow.md +48 -44
- package/docs/run-logs.md +72 -28
- package/docs/testing.md +105 -98
- package/docs/verification-trees.md +23 -22
- package/package.json +7 -6
- package/dist/src/commands/rebase.d.ts +0 -4
- package/dist/src/commands/rebase.js +0 -5
- package/dist/src/core/patch-artifact-normalize.d.ts +0 -21
- package/dist/src/core/patch-artifact-normalize.js +0 -24
- package/dist/src/core/patch-lint-reexports.d.ts +0 -7
- package/dist/src/core/patch-lint-reexports.js +0 -8
- package/dist/src/core/wire-targets.d.ts +0 -7
- package/dist/src/core/wire-targets.js +0 -8
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
2
|
/**
|
|
3
|
-
* `fireforge patch lint-ignore <name
|
|
3
|
+
* `fireforge patch lint-ignore <name>`: adds, removes, or clears entries
|
|
4
4
|
* in `PatchMetadata.lintIgnore` without rewriting the `.patch` file body.
|
|
5
5
|
*
|
|
6
6
|
* Companion to `fireforge re-export <name> --lint-ignore <id>` (which is
|
|
7
|
-
* append-only).
|
|
8
|
-
* express:
|
|
7
|
+
* append-only). It exists for the cases re-export cannot express:
|
|
9
8
|
* - Removing a single entry without dropping the rest of the list.
|
|
10
9
|
* - Clearing the entire list when the operator wants the rule(s) to
|
|
11
10
|
* start firing again.
|
|
@@ -16,23 +15,24 @@
|
|
|
16
15
|
* `--clear` must be supplied per invocation. The read-modify-write
|
|
17
16
|
* happens inside the patch directory lock via {@link mutatePatchMetadata}
|
|
18
17
|
* so a concurrent writer cannot interleave between the read and the
|
|
19
|
-
* write
|
|
18
|
+
* write, which matters when an operator scripts repeated invocations or
|
|
20
19
|
* runs `--add` and `--remove` back-to-back.
|
|
21
20
|
*/
|
|
22
21
|
import { Command } from 'commander';
|
|
23
|
-
import {
|
|
22
|
+
import { confirmDestructive } from '../../core/destructive.js';
|
|
23
|
+
import { appendHistoryBestEffort } from '../../core/history-log.js';
|
|
24
24
|
import { mutatePatchMetadata } from '../../core/patch-export.js';
|
|
25
25
|
import { GeneralError, InvalidArgumentError } from '../../errors/base.js';
|
|
26
|
-
import { toError } from '../../utils/errors.js';
|
|
27
26
|
import { info, intro, outro, warn } from '../../utils/logger.js';
|
|
28
27
|
import { addWaitLockOption, resolveWaitLockSeconds, stringListOption, } from '../../utils/options.js';
|
|
28
|
+
import { proceedAfterDecision } from '../destructive-decision.js';
|
|
29
29
|
import { requirePatchQueue, requirePatchTarget } from './patch-context.js';
|
|
30
30
|
/**
|
|
31
31
|
* Printed whenever `--add` lands a new check id. The waiver this command
|
|
32
32
|
* writes turns per-patch lint green immediately, but consumer projects
|
|
33
|
-
* commonly audit lintIgnore lists against a reviewed allow-map
|
|
34
|
-
* that the map also needs updating otherwise costs a full
|
|
35
|
-
* run.
|
|
33
|
+
* commonly audit lintIgnore lists against a reviewed allow-map, and
|
|
34
|
+
* discovering that the map also needs updating otherwise costs a full
|
|
35
|
+
* downstream gate run.
|
|
36
36
|
*/
|
|
37
37
|
const LINT_IGNORE_REVIEW_WARNING = "This lint waiver is subject to the project's patch-policy review process. " +
|
|
38
38
|
'Downstream policy audits that mirror lintIgnore lists in a reviewed allow-map ' +
|
|
@@ -65,7 +65,7 @@ function applyMode(existing, mode, values) {
|
|
|
65
65
|
* `info()` / dry-run / history args. Exported for unit-testing the
|
|
66
66
|
* message format directly without mocking the logger transport.
|
|
67
67
|
*/
|
|
68
|
-
|
|
68
|
+
function describeChange(before, after, mode, values) {
|
|
69
69
|
const beforeSet = new Set(before);
|
|
70
70
|
const afterSet = new Set(after);
|
|
71
71
|
if (mode === 'clear') {
|
|
@@ -102,8 +102,8 @@ export async function patchLintIgnoreCommand(projectRoot, identifier, options =
|
|
|
102
102
|
const isDryRun = options.dryRun === true;
|
|
103
103
|
intro(isDryRun ? 'FireForge patch lint-ignore (dry run)' : 'FireForge patch lint-ignore');
|
|
104
104
|
// Mode mutex: exactly one mode per invocation. Combinations like
|
|
105
|
-
// `--add foo --remove bar` are rejected
|
|
106
|
-
// runs the command twice (clearer audit trail) and `--clear` plus a
|
|
105
|
+
// `--add foo --remove bar` are rejected: an operator who needs both
|
|
106
|
+
// runs the command twice (clearer audit trail), and `--clear` plus a
|
|
107
107
|
// mode is contradictory.
|
|
108
108
|
const adding = (options.add?.length ?? 0) > 0;
|
|
109
109
|
const removing = (options.remove?.length ?? 0) > 0;
|
|
@@ -122,8 +122,8 @@ export async function patchLintIgnoreCommand(projectRoot, identifier, options =
|
|
|
122
122
|
// Destructive-operation contract (docs/lifecycle-invariants.md): manifest
|
|
123
123
|
// metadata mutations get summary + dry-run + confirmation/--yes + history
|
|
124
124
|
// uniformly. Accepting --yes without ever prompting makes the flag appear
|
|
125
|
-
// only in the history record
|
|
126
|
-
//
|
|
125
|
+
// only in the history record, and suppressing lint findings is the kind
|
|
126
|
+
// of mutation an operator should approve consciously.
|
|
127
127
|
const currentList = target.lintIgnore ?? [];
|
|
128
128
|
const projectedList = applyMode(currentList, mode, values) ?? [];
|
|
129
129
|
const addsNewIds = mode === 'add' && projectedList.length > currentList.length;
|
|
@@ -135,30 +135,24 @@ export async function patchLintIgnoreCommand(projectRoot, identifier, options =
|
|
|
135
135
|
yes: options.yes === true,
|
|
136
136
|
dryRun: isDryRun,
|
|
137
137
|
});
|
|
138
|
-
if (decision === 'dry-run') {
|
|
139
|
-
|
|
140
|
-
warn(LINT_IGNORE_REVIEW_WARNING);
|
|
141
|
-
}
|
|
142
|
-
outro('Dry run complete — no changes made');
|
|
143
|
-
return;
|
|
138
|
+
if (decision === 'dry-run' && addsNewIds) {
|
|
139
|
+
warn(LINT_IGNORE_REVIEW_WARNING);
|
|
144
140
|
}
|
|
145
|
-
if (decision
|
|
146
|
-
outro('Cancelled — no changes made');
|
|
141
|
+
if (!proceedAfterDecision(decision, 'Cancelled — no changes made'))
|
|
147
142
|
return;
|
|
148
|
-
}
|
|
149
143
|
const result = await mutatePatchMetadata(paths.patches, target.filename, (existing) => {
|
|
150
144
|
const next = applyMode(existing.lintIgnore ?? [], mode, values);
|
|
151
145
|
// Either set the new list when non-empty or unset the field
|
|
152
146
|
// entirely. The mutation API splits these to keep the
|
|
153
|
-
// exactOptionalPropertyTypes contract clean
|
|
147
|
+
// exactOptionalPropertyTypes contract clean: only set values land
|
|
154
148
|
// in the typed `Partial<PatchMetadata>`, and the unset list is
|
|
155
149
|
// applied via `delete` after spread.
|
|
156
150
|
return next !== undefined ? { set: { lintIgnore: next } } : { unset: ['lintIgnore'] };
|
|
157
151
|
}, { waitLockSeconds: resolveWaitLockSeconds(options.waitLock), command: 'patch lint-ignore' });
|
|
158
152
|
if (!result) {
|
|
159
153
|
// Race: target vanished between the manifest read above and the
|
|
160
|
-
// locked mutate.
|
|
161
|
-
// no-op
|
|
154
|
+
// locked mutate. Surfaced as a hard error rather than a silent
|
|
155
|
+
// no-op, because the operator's intent did not land.
|
|
162
156
|
throw new GeneralError(`Patch ${target.filename} disappeared from the manifest during the update. Re-run after investigating.`);
|
|
163
157
|
}
|
|
164
158
|
const existing = result.before.lintIgnore ?? [];
|
|
@@ -167,23 +161,18 @@ export async function patchLintIgnoreCommand(projectRoot, identifier, options =
|
|
|
167
161
|
if (mode === 'add' && projected.length > existing.length) {
|
|
168
162
|
warn(LINT_IGNORE_REVIEW_WARNING);
|
|
169
163
|
}
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
catch (historyError) {
|
|
185
|
-
warn(`History log append failed after patch lint-ignore committed (${target.filename}): ${toError(historyError).message}`);
|
|
186
|
-
}
|
|
164
|
+
await appendHistoryBestEffort(paths.patches, {
|
|
165
|
+
operation: 'patch-lint-ignore',
|
|
166
|
+
args: {
|
|
167
|
+
filename: target.filename,
|
|
168
|
+
mode,
|
|
169
|
+
values: [...values],
|
|
170
|
+
before: existing,
|
|
171
|
+
after: projected,
|
|
172
|
+
},
|
|
173
|
+
...(options.yes === true ? { yes: true } : {}),
|
|
174
|
+
result: 'ok',
|
|
175
|
+
}, `patch lint-ignore committed (${target.filename})`);
|
|
187
176
|
outro('Patch lint-ignore complete');
|
|
188
177
|
}
|
|
189
178
|
/**
|
|
@@ -205,7 +194,7 @@ export function registerPatchLintIgnore(parent, context) {
|
|
|
205
194
|
addWaitLockOption(command).action(withErrorHandling(async (name, options) => {
|
|
206
195
|
// Commander defaults `--add`/`--remove` to `[]` so they appear in
|
|
207
196
|
// the options object even when unused. Strip empty arrays so
|
|
208
|
-
// `pickDefined` sees them as absent
|
|
197
|
+
// `pickDefined` sees them as absent. Otherwise the mode-count
|
|
209
198
|
// mutex would treat zero-length arrays as a present mode.
|
|
210
199
|
const normalized = {};
|
|
211
200
|
if (options.add !== undefined && options.add.length > 0)
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `fireforge patch move-files <from> <to> --create --order <n>`
|
|
2
|
+
* `fireforge patch move-files <from> <to> --create --order <n>` creates
|
|
3
3
|
* the target patch at the requested sparse order and moves the files into it
|
|
4
4
|
* as one transaction. This is the transactional bootstrap of a split:
|
|
5
5
|
* without it, moving files into a not-yet-existing patch requires a manual
|
|
6
6
|
* shrink-then-export dance with hand-repointed staged-dependency owners.
|
|
7
7
|
*
|
|
8
8
|
* Mirrors `patch split` end-to-end (same planning, projection lint, policy
|
|
9
|
-
* enforcement, and locked commit)
|
|
9
|
+
* enforcement, and locked commit). The `<to>` argument becomes the new
|
|
10
10
|
* patch's name/slug the way `split --name` does.
|
|
11
11
|
*/
|
|
12
12
|
import type { PatchMoveFilesOptions } from '../../types/commands/index.js';
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
2
|
/**
|
|
3
|
-
* `fireforge patch move-files <from> <to> --create --order <n>`
|
|
3
|
+
* `fireforge patch move-files <from> <to> --create --order <n>` creates
|
|
4
4
|
* the target patch at the requested sparse order and moves the files into it
|
|
5
5
|
* as one transaction. This is the transactional bootstrap of a split:
|
|
6
6
|
* without it, moving files into a not-yet-existing patch requires a manual
|
|
7
7
|
* shrink-then-export dance with hand-repointed staged-dependency owners.
|
|
8
8
|
*
|
|
9
9
|
* Mirrors `patch split` end-to-end (same planning, projection lint, policy
|
|
10
|
-
* enforcement, and locked commit)
|
|
10
|
+
* enforcement, and locked commit). The `<to>` argument becomes the new
|
|
11
11
|
* patch's name/slug the way `split --name` does.
|
|
12
12
|
*/
|
|
13
13
|
import { getProjectPaths, loadConfig } from '../../core/config.js';
|
|
@@ -15,10 +15,12 @@ import { assertConfirmationAvailable, confirmDestructive } from '../../core/dest
|
|
|
15
15
|
import { formatPatchNotFoundError } from '../../core/patch-identifier-suggest.js';
|
|
16
16
|
import { buildPatchQueueContext } from '../../core/patch-lint.js';
|
|
17
17
|
import { loadPatchesManifest, resolvePatchIdentifier } from '../../core/patch-manifest.js';
|
|
18
|
+
import { formatPatchOrder } from '../../core/patch-parse.js';
|
|
18
19
|
import { enforcePatchPolicy } from '../../core/patch-policy.js';
|
|
19
20
|
import { GeneralError, InvalidArgumentError } from '../../errors/base.js';
|
|
20
21
|
import { info, intro, outro, success } from '../../utils/logger.js';
|
|
21
22
|
import { normalizePatchDisplayName } from '../../utils/validation.js';
|
|
23
|
+
import { proceedAfterDecision } from '../destructive-decision.js';
|
|
22
24
|
import { resolvePlacementPlan } from '../export-flow.js';
|
|
23
25
|
import { runPatchLint } from '../export-shared.js';
|
|
24
26
|
import { commitPatchSplit } from './split.js';
|
|
@@ -31,7 +33,7 @@ export async function patchMoveFilesCreateCommand(projectRoot, fromIdentifier, n
|
|
|
31
33
|
intro(options.dryRun === true
|
|
32
34
|
? 'FireForge patch move-files --create (dry run)'
|
|
33
35
|
: 'FireForge patch move-files --create');
|
|
34
|
-
// Refuse a prompt-less run
|
|
36
|
+
// Refuse a prompt-less run before the diff/lint work, not after it.
|
|
35
37
|
assertConfirmationAvailable('patch move-files --create', options);
|
|
36
38
|
const paths = getProjectPaths(projectRoot);
|
|
37
39
|
const config = await loadConfig(projectRoot);
|
|
@@ -65,7 +67,7 @@ export async function patchMoveFilesCreateCommand(projectRoot, fromIdentifier, n
|
|
|
65
67
|
const placementOptions = { order: options.order };
|
|
66
68
|
const placement = await resolvePlacementPlan(paths.patches, placementOptions, category, newPatchName, config);
|
|
67
69
|
// The filename slug pipeline (resolvePlacementPlan above) strips redundant
|
|
68
|
-
// category prefixes
|
|
70
|
+
// category prefixes. The manifest display name must agree with the bare-slug
|
|
69
71
|
// naming policy, exactly as `export --name` already does.
|
|
70
72
|
const displayName = normalizePatchDisplayName(newPatchName, category);
|
|
71
73
|
if (displayName !== newPatchName) {
|
|
@@ -91,12 +93,30 @@ export async function patchMoveFilesCreateCommand(projectRoot, fromIdentifier, n
|
|
|
91
93
|
// The whole-queue context (built once, with the config so it carries the
|
|
92
94
|
// same patch-policy shape as the committed `lint --per-patch` gate) makes
|
|
93
95
|
// cross-patch `resource:///` imports and sibling head.js harness roots
|
|
94
|
-
// resolve exactly as they will after the move lands
|
|
96
|
+
// resolve exactly as they will after the move lands. Without it the
|
|
95
97
|
// projection lint is blind.
|
|
96
98
|
const patchQueueCtx = await buildPatchQueueContext(paths.patches, config);
|
|
97
99
|
const ignoreChecks = source.lintIgnore ? new Set(source.lintIgnore) : undefined;
|
|
98
|
-
await runPatchLint(
|
|
99
|
-
|
|
100
|
+
await runPatchLint({
|
|
101
|
+
engineDir: paths.engine,
|
|
102
|
+
filesAffected: remainingFiles,
|
|
103
|
+
diffContent: remainingDiff,
|
|
104
|
+
config,
|
|
105
|
+
skipLint: options.skipLint,
|
|
106
|
+
patchQueueCtx,
|
|
107
|
+
ignoreChecks,
|
|
108
|
+
patchTier: source.tier,
|
|
109
|
+
});
|
|
110
|
+
await runPatchLint({
|
|
111
|
+
engineDir: paths.engine,
|
|
112
|
+
filesAffected: movedFiles,
|
|
113
|
+
diffContent: movedDiff,
|
|
114
|
+
config,
|
|
115
|
+
skipLint: options.skipLint,
|
|
116
|
+
patchQueueCtx,
|
|
117
|
+
ignoreChecks,
|
|
118
|
+
patchTier: source.tier,
|
|
119
|
+
});
|
|
100
120
|
const { conflicts, stagedDependencyAdditions } = runProjectedSplitLint(plan, patchQueueCtx);
|
|
101
121
|
plan.stagedDependencyAdditions = stagedDependencyAdditions;
|
|
102
122
|
const newMetadata = buildNewPatchMetadata(plan, config);
|
|
@@ -118,16 +138,10 @@ export async function patchMoveFilesCreateCommand(projectRoot, fromIdentifier, n
|
|
|
118
138
|
unsafeOverride: options.forceUnsafe === true,
|
|
119
139
|
conflicts,
|
|
120
140
|
});
|
|
121
|
-
if (decision
|
|
122
|
-
outro('Dry run complete — no changes made');
|
|
141
|
+
if (!proceedAfterDecision(decision, 'Move cancelled'))
|
|
123
142
|
return;
|
|
124
|
-
}
|
|
125
|
-
if (decision === 'declined') {
|
|
126
|
-
outro('Move cancelled');
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
143
|
await commitPatchSplit(paths.patches, plan, newMetadata, options, config);
|
|
130
|
-
success(`Created ${placement.newFilename} (order ${
|
|
144
|
+
success(`Created ${placement.newFilename} (order ${formatPatchOrder(placement.insertionOrder)}) ` +
|
|
131
145
|
`and moved ${plan.movedFiles.length} file(s) out of ${source.filename}`);
|
|
132
146
|
if (plan.ownerRewrites.length > 0) {
|
|
133
147
|
info(`Re-pointed staged-dependency owners in: ${plan.ownerRewrites.join(', ')}`);
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Transactional file-ownership move into an
|
|
2
|
+
* Transactional file-ownership move into an existing patch.
|
|
3
3
|
*
|
|
4
4
|
* A preview-only `patch move-files <from> <to>` prints two
|
|
5
5
|
* `re-export --files` commands whose real execution costs three further
|
|
6
6
|
* refusals (`--allow-shrink`, `--yes`, and a projected
|
|
7
|
-
* `duplicate-new-file-creation` unless the
|
|
7
|
+
* `duplicate-new-file-creation` unless the shrink lands first, while the
|
|
8
8
|
* printed plan lists the grow first). This module performs the same
|
|
9
9
|
* shrink→grow as one transaction under the patch-directory lock with
|
|
10
10
|
* rollback, mirroring `patch split` / `move-files --create`.
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
2
|
/**
|
|
3
|
-
* Transactional file-ownership move into an
|
|
3
|
+
* Transactional file-ownership move into an existing patch.
|
|
4
4
|
*
|
|
5
5
|
* A preview-only `patch move-files <from> <to>` prints two
|
|
6
6
|
* `re-export --files` commands whose real execution costs three further
|
|
7
7
|
* refusals (`--allow-shrink`, `--yes`, and a projected
|
|
8
|
-
* `duplicate-new-file-creation` unless the
|
|
8
|
+
* `duplicate-new-file-creation` unless the shrink lands first, while the
|
|
9
9
|
* printed plan lists the grow first). This module performs the same
|
|
10
10
|
* shrink→grow as one transaction under the patch-directory lock with
|
|
11
11
|
* rollback, mirroring `patch split` / `move-files --create`.
|
|
@@ -15,24 +15,21 @@
|
|
|
15
15
|
* the worktree.
|
|
16
16
|
*/
|
|
17
17
|
import { join } from 'node:path';
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
18
|
+
import { assertConfirmationAvailable, confirmDestructive, } from '../../core/destructive.js';
|
|
19
|
+
import { appendHistoryBestEffort } from '../../core/history-log.js';
|
|
20
|
+
import { buildPatchQueueContext, collectForwardImportEdges, formatPatchLintIssue, lintPatchQueue, } from '../../core/patch-lint.js';
|
|
21
21
|
import { computeProjectedLintRegressions } from '../../core/patch-lint-projection.js';
|
|
22
22
|
import { withPatchDirectoryLock } from '../../core/patch-lock.js';
|
|
23
23
|
import { loadPatchesManifest, savePatchesManifest, validatePatchesManifest, } from '../../core/patch-manifest.js';
|
|
24
|
-
import { buildNewFileTextProjection } from '../../core/patch-transform.js';
|
|
25
24
|
import { GeneralError, InvalidArgumentError } from '../../errors/base.js';
|
|
26
25
|
import { toError } from '../../utils/errors.js';
|
|
27
26
|
import { readText, writeText } from '../../utils/fs.js';
|
|
28
27
|
import { info, outro, success, warn } from '../../utils/logger.js';
|
|
29
28
|
import { resolveWaitLockSeconds } from '../../utils/options.js';
|
|
29
|
+
import { proceedAfterDecision } from '../destructive-decision.js';
|
|
30
30
|
import { runPatchLint } from '../export-shared.js';
|
|
31
|
+
import { projectEntryBody } from './entry-projection.js';
|
|
31
32
|
import { buildSplitDiff, findOwnerRewriteHolders, mergeStagedForwardImports, rewriteSplitOwners, } from './split-plan.js';
|
|
32
|
-
function projectEntryBody(diff) {
|
|
33
|
-
const newFiles = buildNewFileTextProjection(diff);
|
|
34
|
-
return { diff, newFiles, modifiedFileAdditions: buildModifiedFileAdditionsFromDiff(diff) };
|
|
35
|
-
}
|
|
36
33
|
/**
|
|
37
34
|
* Projects the post-move queue through cross-patch lint, auto-declaring the
|
|
38
35
|
* forward edges the move introduces into the target (an importer that used
|
|
@@ -121,9 +118,9 @@ async function commitMoveInto(patchesDir, plan, waitLockSeconds) {
|
|
|
121
118
|
let sourceWritten = false;
|
|
122
119
|
let targetWritten = false;
|
|
123
120
|
try {
|
|
124
|
-
await writeText(sourcePath,
|
|
121
|
+
await writeText(sourcePath, plan.sourceDiff);
|
|
125
122
|
sourceWritten = true;
|
|
126
|
-
await writeText(targetPath,
|
|
123
|
+
await writeText(targetPath, plan.targetDiff);
|
|
127
124
|
targetWritten = true;
|
|
128
125
|
const updatedPatches = manifest.patches.map((patch) => {
|
|
129
126
|
let updated = rewriteSplitOwners(patch, plan.source.filename, movedSet, plan.target.filename);
|
|
@@ -140,21 +137,16 @@ async function commitMoveInto(patchesDir, plan, waitLockSeconds) {
|
|
|
140
137
|
});
|
|
141
138
|
const updated = validatePatchesManifest({ ...manifest, patches: updatedPatches });
|
|
142
139
|
await savePatchesManifest(patchesDir, updated);
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
catch (historyError) {
|
|
156
|
-
warn(`History log append failed after patch move-files committed: ${toError(historyError).message}`);
|
|
157
|
-
}
|
|
140
|
+
await appendHistoryBestEffort(patchesDir, {
|
|
141
|
+
operation: 'patch-move-files',
|
|
142
|
+
args: {
|
|
143
|
+
source: plan.source.filename,
|
|
144
|
+
target: plan.target.filename,
|
|
145
|
+
files: plan.movedFiles,
|
|
146
|
+
ownerRewrites: plan.ownerRewrites,
|
|
147
|
+
},
|
|
148
|
+
result: 'ok',
|
|
149
|
+
}, `patch move-files committed`);
|
|
158
150
|
}
|
|
159
151
|
catch (error) {
|
|
160
152
|
if (targetWritten) {
|
|
@@ -190,7 +182,7 @@ async function commitMoveInto(patchesDir, plan, waitLockSeconds) {
|
|
|
190
182
|
*/
|
|
191
183
|
export async function runMoveFilesInto(args) {
|
|
192
184
|
const { enginePath, patchesDir, source, target, files, sourceAfter, targetAfter, options } = args;
|
|
193
|
-
// Refuse a prompt-less run
|
|
185
|
+
// Refuse a prompt-less run before the diff/lint work, not after it.
|
|
194
186
|
assertConfirmationAvailable('patch move-files', options);
|
|
195
187
|
const sourceDiff = await buildSplitDiff(enginePath, sourceAfter, 'remaining', source.filename);
|
|
196
188
|
const targetDiff = await buildSplitDiff(enginePath, targetAfter, 'moved', target.filename);
|
|
@@ -199,8 +191,26 @@ export async function runMoveFilesInto(args) {
|
|
|
199
191
|
// parity) resolves cross-patch imports and sibling head.js harness roots
|
|
200
192
|
// instead of linting each projected body blind.
|
|
201
193
|
const patchQueueCtx = await buildPatchQueueContext(patchesDir, args.config);
|
|
202
|
-
await runPatchLint(
|
|
203
|
-
|
|
194
|
+
await runPatchLint({
|
|
195
|
+
engineDir: enginePath,
|
|
196
|
+
filesAffected: sourceAfter,
|
|
197
|
+
diffContent: sourceDiff,
|
|
198
|
+
config: args.config,
|
|
199
|
+
skipLint: options.skipLint,
|
|
200
|
+
patchQueueCtx,
|
|
201
|
+
ignoreChecks: source.lintIgnore ? new Set(source.lintIgnore) : undefined,
|
|
202
|
+
patchTier: source.tier,
|
|
203
|
+
});
|
|
204
|
+
await runPatchLint({
|
|
205
|
+
engineDir: enginePath,
|
|
206
|
+
filesAffected: targetAfter,
|
|
207
|
+
diffContent: targetDiff,
|
|
208
|
+
config: args.config,
|
|
209
|
+
skipLint: options.skipLint,
|
|
210
|
+
patchQueueCtx,
|
|
211
|
+
ignoreChecks: target.lintIgnore ? new Set(target.lintIgnore) : undefined,
|
|
212
|
+
patchTier: target.tier,
|
|
213
|
+
});
|
|
204
214
|
const manifest = await loadPatchesManifest(patchesDir);
|
|
205
215
|
const plan = {
|
|
206
216
|
source,
|
|
@@ -231,14 +241,8 @@ export async function runMoveFilesInto(args) {
|
|
|
231
241
|
unsafeOverride: options.forceUnsafe === true,
|
|
232
242
|
conflicts,
|
|
233
243
|
});
|
|
234
|
-
if (decision
|
|
235
|
-
outro('Dry run complete — no changes made');
|
|
236
|
-
return;
|
|
237
|
-
}
|
|
238
|
-
if (decision === 'declined') {
|
|
239
|
-
outro('Move cancelled');
|
|
244
|
+
if (!proceedAfterDecision(decision, 'Move cancelled'))
|
|
240
245
|
return;
|
|
241
|
-
}
|
|
242
246
|
await commitMoveInto(patchesDir, plan, resolveWaitLockSeconds(options.waitLock));
|
|
243
247
|
success(`Moved ${files.length} file(s) from ${source.filename} to ${target.filename}`);
|
|
244
248
|
if (plan.ownerRewrites.length > 0) {
|
|
@@ -13,13 +13,10 @@ import { loadPatchesManifest, resolvePatchIdentifier } from '../../core/patch-ma
|
|
|
13
13
|
import { GeneralError, InvalidArgumentError } from '../../errors/base.js';
|
|
14
14
|
import { pathExists } from '../../utils/fs.js';
|
|
15
15
|
import { info, intro, note, warn } from '../../utils/logger.js';
|
|
16
|
-
import { addWaitLockOption, commanderArgParser, pickDefined } from '../../utils/options.js';
|
|
16
|
+
import { addWaitLockOption, commanderArgParser, pickDefined, stringListOption, } from '../../utils/options.js';
|
|
17
|
+
import { parsePositiveIntegerFlag } from '../../utils/validation.js';
|
|
17
18
|
import { patchMoveFilesCreateCommand } from './move-files-create.js';
|
|
18
19
|
import { runMoveFilesInto } from './move-files-into.js';
|
|
19
|
-
function collectOption(value, previous) {
|
|
20
|
-
previous.push(value);
|
|
21
|
-
return previous;
|
|
22
|
-
}
|
|
23
20
|
function normalizeFileList(files) {
|
|
24
21
|
const cleaned = (files ?? []).map((file) => file.trim()).filter((file) => file.length > 0);
|
|
25
22
|
return [...new Set(cleaned)].sort((left, right) => left.localeCompare(right));
|
|
@@ -131,7 +128,7 @@ export async function patchMoveFilesCommand(projectRoot, fromIdentifier, toIdent
|
|
|
131
128
|
note(formatFiles(targetAfter), `${target.filename} files after move`);
|
|
132
129
|
// Manual fallback (e.g. when the worktree cannot carry both patches'
|
|
133
130
|
// content right now): the equivalent re-export choreography, in
|
|
134
|
-
//
|
|
131
|
+
// executable order. The shrink must land before the grow, or the
|
|
135
132
|
// projected cross-patch lint refuses the pair with
|
|
136
133
|
// duplicate-new-file-creation.
|
|
137
134
|
const applySource = formatReExportCommand(source.filename, sourceAfter, [
|
|
@@ -165,15 +162,9 @@ export function registerPatchMoveFiles(parent, context) {
|
|
|
165
162
|
.command('move-files <from> <to>')
|
|
166
163
|
.description('Preview the re-export commands needed to move file ownership between patches, ' +
|
|
167
164
|
'or create the target patch and move the files in one transaction with --create --order <n>.')
|
|
168
|
-
.option('--file <path>', 'File path relative to engine/ to move (repeatable)',
|
|
165
|
+
.option('--file <path>', 'File path relative to engine/ to move (repeatable)', ...stringListOption())
|
|
169
166
|
.option('--create', 'Create <to> as a new patch and move the files into it (requires --order)')
|
|
170
|
-
.option('--order <n>', 'Exact sparse order for the created patch (only valid with --create)', commanderArgParser((raw) =>
|
|
171
|
-
const n = Number.parseInt(raw, 10);
|
|
172
|
-
if (!Number.isInteger(n) || n <= 0) {
|
|
173
|
-
throw new InvalidArgumentError(`--order must be a positive integer, got "${raw}".`, '--order');
|
|
174
|
-
}
|
|
175
|
-
return n;
|
|
176
|
-
}))
|
|
167
|
+
.option('--order <n>', 'Exact sparse order for the created patch (only valid with --create)', commanderArgParser((raw) => parsePositiveIntegerFlag('--order', raw)))
|
|
177
168
|
.option('--category <category>', "Category for the created patch (default: the source patch's)")
|
|
178
169
|
.option('-d, --description <desc>', 'Description for the created patch')
|
|
179
170
|
.option('--dry-run', 'Show what would happen without writing')
|
|
@@ -10,7 +10,7 @@ import type { ProjectPaths } from '../../types/config.js';
|
|
|
10
10
|
export interface PatchQueueContext {
|
|
11
11
|
/** Project paths resolved from the project root. */
|
|
12
12
|
paths: ProjectPaths;
|
|
13
|
-
/** The loaded manifest
|
|
13
|
+
/** The loaded manifest, guaranteed to contain at least one patch. */
|
|
14
14
|
manifest: PatchesManifest;
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `fireforge patch rename <name
|
|
2
|
+
* `fireforge patch rename <name>`: relabels a patch's filename, manifest
|
|
3
3
|
* `name`, and (optionally) `description` without rewriting the `.patch` file
|
|
4
4
|
* body.
|
|
5
5
|
*
|
|
6
6
|
* Companion to `re-export --files <subset>`. Re-export shrinks the body and
|
|
7
7
|
* `filesAffected` but leaves the patch's identity describing the pre-shrink
|
|
8
8
|
* scope. The only alternative for that drift is `delete` + re-export, which
|
|
9
|
-
* briefly removes the patch from the queue
|
|
10
|
-
* then refuses the re-export until the deleted patch's siblings
|
|
11
|
-
* rewritten.
|
|
9
|
+
* briefly removes the patch from the queue, and any forward-import
|
|
10
|
+
* dependent then refuses the re-export until the deleted patch's siblings
|
|
11
|
+
* are rewritten.
|
|
12
12
|
*
|
|
13
13
|
* The filename rename and the manifest mutation happen under the patch
|
|
14
14
|
* directory lock so concurrent exports cannot allocate the new filename, and
|