@paraharness/git 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +68 -2
- package/dist/builders/create-git-candidate-comparison-tools.d.ts +13 -0
- package/dist/builders/create-git-candidate-comparison-tools.d.ts.map +1 -0
- package/dist/builders/create-git-candidate-comparison-tools.js +41 -0
- package/dist/builders/create-git-candidate-comparison-tools.js.map +1 -0
- package/dist/builders/create-git-commit-and-push-builder.d.ts +18 -0
- package/dist/builders/create-git-commit-and-push-builder.d.ts.map +1 -0
- package/dist/builders/create-git-commit-and-push-builder.js +65 -0
- package/dist/builders/create-git-commit-and-push-builder.js.map +1 -0
- package/dist/builders/create-git-cow-worktree-builder.d.ts +15 -0
- package/dist/builders/create-git-cow-worktree-builder.d.ts.map +1 -0
- package/dist/builders/create-git-cow-worktree-builder.js +64 -0
- package/dist/builders/create-git-cow-worktree-builder.js.map +1 -0
- package/dist/builders/create-git-discard-branch-builder.d.ts +13 -0
- package/dist/builders/create-git-discard-branch-builder.d.ts.map +1 -0
- package/dist/builders/create-git-discard-branch-builder.js +22 -0
- package/dist/builders/create-git-discard-branch-builder.js.map +1 -0
- package/dist/builders/create-git-keep-worktree-builder.d.ts +13 -0
- package/dist/builders/create-git-keep-worktree-builder.d.ts.map +1 -0
- package/dist/builders/create-git-keep-worktree-builder.js +22 -0
- package/dist/builders/create-git-keep-worktree-builder.js.map +1 -0
- package/dist/builders/create-git-merge-queue-builder.d.ts +19 -0
- package/dist/builders/create-git-merge-queue-builder.d.ts.map +1 -0
- package/dist/builders/create-git-merge-queue-builder.js +59 -0
- package/dist/builders/create-git-merge-queue-builder.js.map +1 -0
- package/dist/builders/create-git-patch-equivalence-builder.d.ts +13 -0
- package/dist/builders/create-git-patch-equivalence-builder.d.ts.map +1 -0
- package/dist/builders/create-git-patch-equivalence-builder.js +32 -0
- package/dist/builders/create-git-patch-equivalence-builder.js.map +1 -0
- package/dist/builders/create-git-public-surface-cross-tester-builder.d.ts +14 -0
- package/dist/builders/create-git-public-surface-cross-tester-builder.d.ts.map +1 -0
- package/dist/builders/create-git-public-surface-cross-tester-builder.js +36 -0
- package/dist/builders/create-git-public-surface-cross-tester-builder.js.map +1 -0
- package/dist/builders/create-git-ref-reader-tools.d.ts +13 -0
- package/dist/builders/create-git-ref-reader-tools.d.ts.map +1 -0
- package/dist/builders/create-git-ref-reader-tools.js +41 -0
- package/dist/builders/create-git-ref-reader-tools.js.map +1 -0
- package/dist/builders/create-git-reset-worktree-builder.d.ts +13 -0
- package/dist/builders/create-git-reset-worktree-builder.d.ts.map +1 -0
- package/dist/builders/create-git-reset-worktree-builder.js +22 -0
- package/dist/builders/create-git-reset-worktree-builder.js.map +1 -0
- package/dist/builders/create-git-snapshot-and-reset-builder.d.ts +13 -0
- package/dist/builders/create-git-snapshot-and-reset-builder.d.ts.map +1 -0
- package/dist/builders/create-git-snapshot-and-reset-builder.js +23 -0
- package/dist/builders/create-git-snapshot-and-reset-builder.js.map +1 -0
- package/dist/builders/git-commit-and-push-builder.d.ts +44 -0
- package/dist/builders/git-commit-and-push-builder.d.ts.map +1 -0
- package/dist/builders/git-commit-and-push-builder.js +2 -0
- package/dist/builders/git-commit-and-push-builder.js.map +1 -0
- package/dist/builders/git-commit-and-push-options.d.ts +22 -0
- package/dist/builders/git-commit-and-push-options.d.ts.map +1 -0
- package/dist/builders/git-commit-and-push-options.js +2 -0
- package/dist/builders/git-commit-and-push-options.js.map +1 -0
- package/dist/builders/git-cow-worktree-builder.d.ts +64 -0
- package/dist/builders/git-cow-worktree-builder.d.ts.map +1 -0
- package/dist/builders/git-cow-worktree-builder.js +2 -0
- package/dist/builders/git-cow-worktree-builder.js.map +1 -0
- package/dist/builders/git-cow-worktree-options.d.ts +42 -0
- package/dist/builders/git-cow-worktree-options.d.ts.map +1 -0
- package/dist/builders/git-cow-worktree-options.js +2 -0
- package/dist/builders/git-cow-worktree-options.js.map +1 -0
- package/dist/builders/git-merge-queue-builder.d.ts +37 -0
- package/dist/builders/git-merge-queue-builder.d.ts.map +1 -0
- package/dist/builders/git-merge-queue-builder.js +2 -0
- package/dist/builders/git-merge-queue-builder.js.map +1 -0
- package/dist/builders/git-merge-queue-options.d.ts +23 -0
- package/dist/builders/git-merge-queue-options.d.ts.map +1 -0
- package/dist/builders/git-merge-queue-options.js +2 -0
- package/dist/builders/git-merge-queue-options.js.map +1 -0
- package/dist/builders/git-namespace-contract.d.ts +141 -0
- package/dist/builders/git-namespace-contract.d.ts.map +1 -0
- package/dist/builders/git-namespace-contract.js +2 -0
- package/dist/builders/git-namespace-contract.js.map +1 -0
- package/dist/builders/git-namespace.d.ts +6 -0
- package/dist/builders/git-namespace.d.ts.map +1 -0
- package/dist/builders/git-namespace.js +32 -0
- package/dist/builders/git-namespace.js.map +1 -0
- package/dist/builders/git-public-surface-cross-tester-options.d.ts +16 -0
- package/dist/builders/git-public-surface-cross-tester-options.d.ts.map +1 -0
- package/dist/builders/git-public-surface-cross-tester-options.js +2 -0
- package/dist/builders/git-public-surface-cross-tester-options.js.map +1 -0
- package/dist/builders/git-reconcile-strategy-options.d.ts +16 -0
- package/dist/builders/git-reconcile-strategy-options.d.ts.map +1 -0
- package/dist/builders/git-reconcile-strategy-options.js +2 -0
- package/dist/builders/git-reconcile-strategy-options.js.map +1 -0
- package/dist/builders/internal/build-git-cow-worktree-node.d.ts +35 -0
- package/dist/builders/internal/build-git-cow-worktree-node.d.ts.map +1 -0
- package/dist/builders/internal/build-git-cow-worktree-node.js +77 -0
- package/dist/builders/internal/build-git-cow-worktree-node.js.map +1 -0
- package/dist/executors/create-git-executors.d.ts +12 -0
- package/dist/executors/create-git-executors.d.ts.map +1 -0
- package/dist/executors/create-git-executors.js +43 -0
- package/dist/executors/create-git-executors.js.map +1 -0
- package/dist/executors/git-checkpoint-payload.d.ts +44 -0
- package/dist/executors/git-checkpoint-payload.d.ts.map +1 -0
- package/dist/executors/git-checkpoint-payload.js +2 -0
- package/dist/executors/git-checkpoint-payload.js.map +1 -0
- package/dist/executors/git-commit-and-merge-steps.d.ts +33 -0
- package/dist/executors/git-commit-and-merge-steps.d.ts.map +1 -0
- package/dist/executors/git-commit-and-merge-steps.js +52 -0
- package/dist/executors/git-commit-and-merge-steps.js.map +1 -0
- package/dist/executors/git-cow-worktree-scope.d.ts +201 -0
- package/dist/executors/git-cow-worktree-scope.d.ts.map +1 -0
- package/dist/executors/git-cow-worktree-scope.js +260 -0
- package/dist/executors/git-cow-worktree-scope.js.map +1 -0
- package/dist/executors/git-cross-verifiers-and-tools.d.ts +42 -0
- package/dist/executors/git-cross-verifiers-and-tools.d.ts.map +1 -0
- package/dist/executors/git-cross-verifiers-and-tools.js +112 -0
- package/dist/executors/git-cross-verifiers-and-tools.js.map +1 -0
- package/dist/executors/git-executors.constants.d.ts +4 -0
- package/dist/executors/git-executors.constants.d.ts.map +1 -0
- package/dist/executors/git-executors.constants.js +4 -0
- package/dist/executors/git-executors.constants.js.map +1 -0
- package/dist/executors/git-hooks-and-checks.d.ts +51 -0
- package/dist/executors/git-hooks-and-checks.d.ts.map +1 -0
- package/dist/executors/git-hooks-and-checks.js +139 -0
- package/dist/executors/git-hooks-and-checks.js.map +1 -0
- package/dist/executors/internal/checkpoint-restore-steps.d.ts +50 -0
- package/dist/executors/internal/checkpoint-restore-steps.d.ts.map +1 -0
- package/dist/executors/internal/checkpoint-restore-steps.js +184 -0
- package/dist/executors/internal/checkpoint-restore-steps.js.map +1 -0
- package/dist/executors/internal/checkpoint-staging-and-integrity.d.ts +51 -0
- package/dist/executors/internal/checkpoint-staging-and-integrity.d.ts.map +1 -0
- package/dist/executors/internal/checkpoint-staging-and-integrity.js +192 -0
- package/dist/executors/internal/checkpoint-staging-and-integrity.js.map +1 -0
- package/dist/executors/internal/compute-worktree-status-options.d.ts +15 -0
- package/dist/executors/internal/compute-worktree-status-options.d.ts.map +1 -0
- package/dist/executors/internal/compute-worktree-status-options.js +2 -0
- package/dist/executors/internal/compute-worktree-status-options.js.map +1 -0
- package/dist/executors/internal/cow-worktree-hydrator.d.ts +51 -0
- package/dist/executors/internal/cow-worktree-hydrator.d.ts.map +1 -0
- package/dist/executors/internal/cow-worktree-hydrator.js +174 -0
- package/dist/executors/internal/cow-worktree-hydrator.js.map +1 -0
- package/dist/executors/internal/file-digest-and-globs.d.ts +58 -0
- package/dist/executors/internal/file-digest-and-globs.d.ts.map +1 -0
- package/dist/executors/internal/file-digest-and-globs.js +188 -0
- package/dist/executors/internal/file-digest-and-globs.js.map +1 -0
- package/dist/executors/internal/git-checkpoint-diff-effects.d.ts +16 -0
- package/dist/executors/internal/git-checkpoint-diff-effects.d.ts.map +1 -0
- package/dist/executors/internal/git-checkpoint-diff-effects.js +38 -0
- package/dist/executors/internal/git-checkpoint-diff-effects.js.map +1 -0
- package/dist/executors/internal/git-checkpoint-restore.d.ts +14 -0
- package/dist/executors/internal/git-checkpoint-restore.d.ts.map +1 -0
- package/dist/executors/internal/git-checkpoint-restore.js +37 -0
- package/dist/executors/internal/git-checkpoint-restore.js.map +1 -0
- package/dist/executors/internal/git-checkpoint-serialize.d.ts +13 -0
- package/dist/executors/internal/git-checkpoint-serialize.d.ts.map +1 -0
- package/dist/executors/internal/git-checkpoint-serialize.js +48 -0
- package/dist/executors/internal/git-checkpoint-serialize.js.map +1 -0
- package/dist/executors/internal/git-checkpoint-status-map.d.ts +14 -0
- package/dist/executors/internal/git-checkpoint-status-map.d.ts.map +1 -0
- package/dist/executors/internal/git-checkpoint-status-map.js +27 -0
- package/dist/executors/internal/git-checkpoint-status-map.js.map +1 -0
- package/dist/executors/internal/git-cli-command-options.d.ts +21 -0
- package/dist/executors/internal/git-cli-command-options.d.ts.map +1 -0
- package/dist/executors/internal/git-cli-command-options.js +2 -0
- package/dist/executors/internal/git-cli-command-options.js.map +1 -0
- package/dist/executors/internal/git-cli-command-result.d.ts +16 -0
- package/dist/executors/internal/git-cli-command-result.d.ts.map +1 -0
- package/dist/executors/internal/git-cli-command-result.js +2 -0
- package/dist/executors/internal/git-cli-command-result.js.map +1 -0
- package/dist/executors/internal/git-cli-runner.d.ts +73 -0
- package/dist/executors/internal/git-cli-runner.d.ts.map +1 -0
- package/dist/executors/internal/git-cli-runner.js +157 -0
- package/dist/executors/internal/git-cli-runner.js.map +1 -0
- package/dist/executors/internal/git-cross-test-import-scanner.d.ts +68 -0
- package/dist/executors/internal/git-cross-test-import-scanner.d.ts.map +1 -0
- package/dist/executors/internal/git-cross-test-import-scanner.js +226 -0
- package/dist/executors/internal/git-cross-test-import-scanner.js.map +1 -0
- package/dist/executors/internal/git-executor.constants.d.ts +29 -0
- package/dist/executors/internal/git-executor.constants.d.ts.map +1 -0
- package/dist/executors/internal/git-executor.constants.js +40 -0
- package/dist/executors/internal/git-executor.constants.js.map +1 -0
- package/dist/executors/internal/git-merge-train-bisect.d.ts +51 -0
- package/dist/executors/internal/git-merge-train-bisect.d.ts.map +1 -0
- package/dist/executors/internal/git-merge-train-bisect.js +152 -0
- package/dist/executors/internal/git-merge-train-bisect.js.map +1 -0
- package/dist/executors/internal/git-tool-dispatchers.d.ts +26 -0
- package/dist/executors/internal/git-tool-dispatchers.d.ts.map +1 -0
- package/dist/executors/internal/git-tool-dispatchers.js +174 -0
- package/dist/executors/internal/git-tool-dispatchers.js.map +1 -0
- package/dist/executors/internal/git-worktree-acquire-root.d.ts +22 -0
- package/dist/executors/internal/git-worktree-acquire-root.d.ts.map +1 -0
- package/dist/executors/internal/git-worktree-acquire-root.js +67 -0
- package/dist/executors/internal/git-worktree-acquire-root.js.map +1 -0
- package/dist/executors/internal/git-worktree-commit-child.d.ts +26 -0
- package/dist/executors/internal/git-worktree-commit-child.d.ts.map +1 -0
- package/dist/executors/internal/git-worktree-commit-child.js +88 -0
- package/dist/executors/internal/git-worktree-commit-child.js.map +1 -0
- package/dist/executors/internal/git-worktree-flush-and-prune.d.ts +43 -0
- package/dist/executors/internal/git-worktree-flush-and-prune.d.ts.map +1 -0
- package/dist/executors/internal/git-worktree-flush-and-prune.js +169 -0
- package/dist/executors/internal/git-worktree-flush-and-prune.js.map +1 -0
- package/dist/executors/internal/git-worktree-fork-and-release.d.ts +37 -0
- package/dist/executors/internal/git-worktree-fork-and-release.d.ts.map +1 -0
- package/dist/executors/internal/git-worktree-fork-and-release.js +159 -0
- package/dist/executors/internal/git-worktree-fork-and-release.js.map +1 -0
- package/dist/executors/internal/git-worktree-materialize-merge.d.ts +51 -0
- package/dist/executors/internal/git-worktree-materialize-merge.d.ts.map +1 -0
- package/dist/executors/internal/git-worktree-materialize-merge.js +161 -0
- package/dist/executors/internal/git-worktree-materialize-merge.js.map +1 -0
- package/dist/executors/internal/git-worktree-reattach.d.ts +57 -0
- package/dist/executors/internal/git-worktree-reattach.d.ts.map +1 -0
- package/dist/executors/internal/git-worktree-reattach.js +324 -0
- package/dist/executors/internal/git-worktree-reattach.js.map +1 -0
- package/dist/executors/internal/git-worktree-sync-child-and-root.d.ts +26 -0
- package/dist/executors/internal/git-worktree-sync-child-and-root.d.ts.map +1 -0
- package/dist/executors/internal/git-worktree-sync-child-and-root.js +82 -0
- package/dist/executors/internal/git-worktree-sync-child-and-root.js.map +1 -0
- package/dist/executors/internal/host-repository-head-state.d.ts +10 -0
- package/dist/executors/internal/host-repository-head-state.d.ts.map +1 -0
- package/dist/executors/internal/host-repository-head-state.js +2 -0
- package/dist/executors/internal/host-repository-head-state.js.map +1 -0
- package/dist/executors/internal/merge-train-candidate.d.ts +14 -0
- package/dist/executors/internal/merge-train-candidate.d.ts.map +1 -0
- package/dist/executors/internal/merge-train-candidate.js +2 -0
- package/dist/executors/internal/merge-train-candidate.js.map +1 -0
- package/dist/executors/internal/merge-train-chain-entry.d.ts +13 -0
- package/dist/executors/internal/merge-train-chain-entry.d.ts.map +1 -0
- package/dist/executors/internal/merge-train-chain-entry.js +2 -0
- package/dist/executors/internal/merge-train-chain-entry.js.map +1 -0
- package/dist/executors/internal/merge-train-result.d.ts +19 -0
- package/dist/executors/internal/merge-train-result.d.ts.map +1 -0
- package/dist/executors/internal/merge-train-result.js +2 -0
- package/dist/executors/internal/merge-train-result.js.map +1 -0
- package/dist/executors/internal/merge-train-runner.d.ts +16 -0
- package/dist/executors/internal/merge-train-runner.d.ts.map +1 -0
- package/dist/executors/internal/merge-train-runner.js +141 -0
- package/dist/executors/internal/merge-train-runner.js.map +1 -0
- package/dist/executors/internal/merge-tree-materializer-params.d.ts +19 -0
- package/dist/executors/internal/merge-tree-materializer-params.d.ts.map +1 -0
- package/dist/executors/internal/merge-tree-materializer-params.js +2 -0
- package/dist/executors/internal/merge-tree-materializer-params.js.map +1 -0
- package/dist/executors/internal/parent-fast-forward.d.ts +47 -0
- package/dist/executors/internal/parent-fast-forward.d.ts.map +1 -0
- package/dist/executors/internal/parent-fast-forward.js +138 -0
- package/dist/executors/internal/parent-fast-forward.js.map +1 -0
- package/dist/executors/internal/porcelain-v2-parser.d.ts +49 -0
- package/dist/executors/internal/porcelain-v2-parser.d.ts.map +1 -0
- package/dist/executors/internal/porcelain-v2-parser.js +165 -0
- package/dist/executors/internal/porcelain-v2-parser.js.map +1 -0
- package/dist/executors/internal/resolve-effective-base-branch.d.ts +13 -0
- package/dist/executors/internal/resolve-effective-base-branch.d.ts.map +1 -0
- package/dist/executors/internal/resolve-effective-base-branch.js +38 -0
- package/dist/executors/internal/resolve-effective-base-branch.js.map +1 -0
- package/dist/executors/internal/squash-rebase-and-push.d.ts +14 -0
- package/dist/executors/internal/squash-rebase-and-push.d.ts.map +1 -0
- package/dist/executors/internal/squash-rebase-and-push.js +192 -0
- package/dist/executors/internal/squash-rebase-and-push.js.map +1 -0
- package/dist/executors/internal/staged-checkpoint-tree-result.d.ts +13 -0
- package/dist/executors/internal/staged-checkpoint-tree-result.d.ts.map +1 -0
- package/dist/executors/internal/staged-checkpoint-tree-result.js +2 -0
- package/dist/executors/internal/staged-checkpoint-tree-result.js.map +1 -0
- package/dist/executors/internal/stateless-merge-tree-result.d.ts +12 -0
- package/dist/executors/internal/stateless-merge-tree-result.d.ts.map +1 -0
- package/dist/executors/internal/stateless-merge-tree-result.js +2 -0
- package/dist/executors/internal/stateless-merge-tree-result.js.map +1 -0
- package/dist/executors/internal/synthesized-working-tree-commit.d.ts +10 -0
- package/dist/executors/internal/synthesized-working-tree-commit.d.ts.map +1 -0
- package/dist/executors/internal/synthesized-working-tree-commit.js +2 -0
- package/dist/executors/internal/synthesized-working-tree-commit.js.map +1 -0
- package/dist/executors/internal/worktree-integrity-verdict.d.ts +10 -0
- package/dist/executors/internal/worktree-integrity-verdict.d.ts.map +1 -0
- package/dist/executors/internal/worktree-integrity-verdict.js +2 -0
- package/dist/executors/internal/worktree-integrity-verdict.js.map +1 -0
- package/dist/executors/internal/worktree-status-snapshot.d.ts +17 -0
- package/dist/executors/internal/worktree-status-snapshot.d.ts.map +1 -0
- package/dist/executors/internal/worktree-status-snapshot.js +2 -0
- package/dist/executors/internal/worktree-status-snapshot.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/git-receipts.schema.d.ts +174 -0
- package/dist/schemas/git-receipts.schema.d.ts.map +1 -0
- package/dist/schemas/git-receipts.schema.js +123 -0
- package/dist/schemas/git-receipts.schema.js.map +1 -0
- package/package.json +71 -3
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { GitWorktreeHandle, ToolEffect } from '@paraharness/core';
|
|
2
|
+
import type { ComputeWorktreeStatusOptions } from './compute-worktree-status-options.js';
|
|
3
|
+
import type { WorktreeStatusSnapshot } from './worktree-status-snapshot.js';
|
|
4
|
+
/**
|
|
5
|
+
* Parses NUL-delimited `git status --porcelain=v2 -z --no-renames --untracked-files=all` output into `WorktreeStatusSnapshot`.
|
|
6
|
+
*
|
|
7
|
+
* Hashes every dirty tracked and untracked file via `computePathModeAndSha256` while filtering out `excludeGlobs`.
|
|
8
|
+
*
|
|
9
|
+
* @param {string} worktreePath - Worktree directory path.
|
|
10
|
+
* @param {string} rawStdout - Raw NUL-delimited stdout from `git status --porcelain=v2 -z`.
|
|
11
|
+
* @param {ComputeWorktreeStatusOptions} [options] - Optional exclusion globs and baseline ignored path set.
|
|
12
|
+
*
|
|
13
|
+
* @returns {Promise<WorktreeStatusSnapshot>} Parsed worktree status snapshot.
|
|
14
|
+
*/
|
|
15
|
+
export declare function parsePorcelainV2Records(worktreePath: string, rawStdout: string, options?: ComputeWorktreeStatusOptions): Promise<WorktreeStatusSnapshot>;
|
|
16
|
+
/**
|
|
17
|
+
* Finds the 0-based index of the `n`-th space character in `input`.
|
|
18
|
+
*
|
|
19
|
+
* Used to extract repository-relative file paths containing spaces from porcelain v2 records.
|
|
20
|
+
*
|
|
21
|
+
* @param {string} input - Porcelain v2 record line.
|
|
22
|
+
* @param {number} count - 1-based space occurrence count to locate.
|
|
23
|
+
*
|
|
24
|
+
* @returns {number} Character index of the `count`-th space, or `-1` if fewer spaces exist.
|
|
25
|
+
*/
|
|
26
|
+
export declare function nthSpaceIndex(input: string, count: number): number;
|
|
27
|
+
/**
|
|
28
|
+
* Checks whether any `.gitignore` or `**\/.gitignore` entry differs between two status maps.
|
|
29
|
+
*
|
|
30
|
+
* Triggers `--ignored=matching` scanning in `diffEffects` when a subprocess modifies `.gitignore`.
|
|
31
|
+
*
|
|
32
|
+
* @param {Readonly<Record<string, string>>} beforeMap - Baseline status map from `fromCheckpoint`.
|
|
33
|
+
* @param {Readonly<Record<string, string>>} afterMap - Current status map.
|
|
34
|
+
*
|
|
35
|
+
* @returns {boolean} `true` if any `.gitignore` path was added, modified, or deleted.
|
|
36
|
+
*/
|
|
37
|
+
export declare function hasGitignoreChanged(beforeMap: Readonly<Record<string, string>>, afterMap: Readonly<Record<string, string>>): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Builds the `fs:effect` `ToolEffect` list from the symmetric difference of worktree paths.
|
|
40
|
+
*
|
|
41
|
+
* Queries `git cat-file -e <baseRef>:<path>` for `existingPathsAtBaseRef` and reads `proposedContent` for UTF-8 files.
|
|
42
|
+
*
|
|
43
|
+
* @param {GitWorktreeHandle} handle - Active worktree handle.
|
|
44
|
+
* @param {readonly string[]} symDiffPaths - Sorted paths in the symmetric status difference.
|
|
45
|
+
*
|
|
46
|
+
* @returns {Promise<readonly ToolEffect[]>} Frozen `ToolEffect` tuple (empty when `symDiffPaths` is empty).
|
|
47
|
+
*/
|
|
48
|
+
export declare function buildFsDiffToolEffects(handle: GitWorktreeHandle, symDiffPaths: readonly string[]): Promise<readonly ToolEffect[]>;
|
|
49
|
+
//# sourceMappingURL=porcelain-v2-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"porcelain-v2-parser.d.ts","sourceRoot":"","sources":["../../../src/executors/internal/porcelain-v2-parser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AAMzF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAuC5E;;;;;;;;;;GAUG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,4BAA4B,GACrC,OAAO,CAAC,sBAAsB,CAAC,CA4CjC;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CASlE;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC3C,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACzC,OAAO,CAQT;AAED;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,iBAAiB,EACzB,YAAY,EAAE,SAAS,MAAM,EAAE,GAC9B,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC,CA0BhC"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { compileWorktreeExcludeMatcher, computePathModeAndSha256, } from './file-digest-and-globs.js';
|
|
4
|
+
import { runGitCommand } from './git-cli-runner.js';
|
|
5
|
+
/**
|
|
6
|
+
* Expands a newly ignored directory or file entry (`! <relPath>`) into its underlying files and records their digests.
|
|
7
|
+
*
|
|
8
|
+
* @param {CollectNewlyIgnoredFilesParams} params - Ignored file collection parameters.
|
|
9
|
+
*
|
|
10
|
+
* @returns {Promise<void>} Resolves once all matching ignored files under `params.relPath` are hashed into `params.statusMap`.
|
|
11
|
+
*/
|
|
12
|
+
async function collectNewlyIgnoredFiles(params) {
|
|
13
|
+
const lsFilesOutput = await runGitCommand({
|
|
14
|
+
cwd: params.worktreePath,
|
|
15
|
+
args: ['ls-files', '--others', '-i', '--exclude-standard', '-z', '--', params.relPath],
|
|
16
|
+
});
|
|
17
|
+
for (const subPath of lsFilesOutput.stdout.split('\0')) {
|
|
18
|
+
if (subPath.length > 0 && !params.isExcluded(subPath)) {
|
|
19
|
+
params.statusMap[subPath] = await computePathModeAndSha256(path.join(params.worktreePath, subPath));
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Parses NUL-delimited `git status --porcelain=v2 -z --no-renames --untracked-files=all` output into `WorktreeStatusSnapshot`.
|
|
25
|
+
*
|
|
26
|
+
* Hashes every dirty tracked and untracked file via `computePathModeAndSha256` while filtering out `excludeGlobs`.
|
|
27
|
+
*
|
|
28
|
+
* @param {string} worktreePath - Worktree directory path.
|
|
29
|
+
* @param {string} rawStdout - Raw NUL-delimited stdout from `git status --porcelain=v2 -z`.
|
|
30
|
+
* @param {ComputeWorktreeStatusOptions} [options] - Optional exclusion globs and baseline ignored path set.
|
|
31
|
+
*
|
|
32
|
+
* @returns {Promise<WorktreeStatusSnapshot>} Parsed worktree status snapshot.
|
|
33
|
+
*/
|
|
34
|
+
export async function parsePorcelainV2Records(worktreePath, rawStdout, options) {
|
|
35
|
+
const isExcluded = compileWorktreeExcludeMatcher(options?.excludeGlobs);
|
|
36
|
+
const statusMap = {};
|
|
37
|
+
const untrackedPaths = new Set();
|
|
38
|
+
const deletedPaths = new Set();
|
|
39
|
+
const ignoredPaths = [];
|
|
40
|
+
for (const record of rawStdout.split('\0')) {
|
|
41
|
+
if (record.length === 0)
|
|
42
|
+
continue;
|
|
43
|
+
if (record.startsWith('? ')) {
|
|
44
|
+
const relPath = record.slice(2);
|
|
45
|
+
if (isExcluded(relPath))
|
|
46
|
+
continue;
|
|
47
|
+
untrackedPaths.add(relPath);
|
|
48
|
+
statusMap[relPath] = await computePathModeAndSha256(path.join(worktreePath, relPath));
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
if (record.startsWith('! ')) {
|
|
52
|
+
const relPath = record.slice(2);
|
|
53
|
+
ignoredPaths.push(relPath);
|
|
54
|
+
if (options?.includeMatchingIgnored &&
|
|
55
|
+
options.baselineIgnoredPaths !== undefined &&
|
|
56
|
+
!options.baselineIgnoredPaths.has(relPath) &&
|
|
57
|
+
!isExcluded(relPath)) {
|
|
58
|
+
await collectNewlyIgnoredFiles({
|
|
59
|
+
worktreePath,
|
|
60
|
+
relPath,
|
|
61
|
+
isExcluded,
|
|
62
|
+
statusMap,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
if (!record.startsWith('1 ') && !record.startsWith('u '))
|
|
68
|
+
continue;
|
|
69
|
+
const spaceIdx = record.startsWith('1 ') ? nthSpaceIndex(record, 8) : nthSpaceIndex(record, 10);
|
|
70
|
+
if (spaceIdx === -1)
|
|
71
|
+
continue;
|
|
72
|
+
const relPath = record.slice(spaceIdx + 1);
|
|
73
|
+
if (isExcluded(relPath))
|
|
74
|
+
continue;
|
|
75
|
+
const rawDigest = await computePathModeAndSha256(path.join(worktreePath, relPath));
|
|
76
|
+
const digest = rawDigest === '040000:directory' ? 'DELETED' : rawDigest;
|
|
77
|
+
statusMap[relPath] = digest;
|
|
78
|
+
if (digest === 'DELETED')
|
|
79
|
+
deletedPaths.add(relPath);
|
|
80
|
+
}
|
|
81
|
+
return Object.freeze({ statusMap: Object.freeze(statusMap), untrackedPaths, deletedPaths, ignoredPaths: Object.freeze(ignoredPaths) });
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Finds the 0-based index of the `n`-th space character in `input`.
|
|
85
|
+
*
|
|
86
|
+
* Used to extract repository-relative file paths containing spaces from porcelain v2 records.
|
|
87
|
+
*
|
|
88
|
+
* @param {string} input - Porcelain v2 record line.
|
|
89
|
+
* @param {number} count - 1-based space occurrence count to locate.
|
|
90
|
+
*
|
|
91
|
+
* @returns {number} Character index of the `count`-th space, or `-1` if fewer spaces exist.
|
|
92
|
+
*/
|
|
93
|
+
export function nthSpaceIndex(input, count) {
|
|
94
|
+
let seen = 0;
|
|
95
|
+
for (let i = 0; i < input.length; i += 1) {
|
|
96
|
+
if (input[i] === ' ') {
|
|
97
|
+
seen += 1;
|
|
98
|
+
if (seen === count)
|
|
99
|
+
return i;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return -1;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Checks whether any `.gitignore` or `**\/.gitignore` entry differs between two status maps.
|
|
106
|
+
*
|
|
107
|
+
* Triggers `--ignored=matching` scanning in `diffEffects` when a subprocess modifies `.gitignore`.
|
|
108
|
+
*
|
|
109
|
+
* @param {Readonly<Record<string, string>>} beforeMap - Baseline status map from `fromCheckpoint`.
|
|
110
|
+
* @param {Readonly<Record<string, string>>} afterMap - Current status map.
|
|
111
|
+
*
|
|
112
|
+
* @returns {boolean} `true` if any `.gitignore` path was added, modified, or deleted.
|
|
113
|
+
*/
|
|
114
|
+
export function hasGitignoreChanged(beforeMap, afterMap) {
|
|
115
|
+
for (const key of Object.keys(beforeMap)) {
|
|
116
|
+
if ((key === '.gitignore' || key.endsWith('/.gitignore')) && beforeMap[key] !== afterMap[key])
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
for (const key of Object.keys(afterMap)) {
|
|
120
|
+
if ((key === '.gitignore' || key.endsWith('/.gitignore')) && beforeMap[key] !== afterMap[key])
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Builds the `fs:effect` `ToolEffect` list from the symmetric difference of worktree paths.
|
|
127
|
+
*
|
|
128
|
+
* Queries `git cat-file -e <baseRef>:<path>` for `existingPathsAtBaseRef` and reads `proposedContent` for UTF-8 files.
|
|
129
|
+
*
|
|
130
|
+
* @param {GitWorktreeHandle} handle - Active worktree handle.
|
|
131
|
+
* @param {readonly string[]} symDiffPaths - Sorted paths in the symmetric status difference.
|
|
132
|
+
*
|
|
133
|
+
* @returns {Promise<readonly ToolEffect[]>} Frozen `ToolEffect` tuple (empty when `symDiffPaths` is empty).
|
|
134
|
+
*/
|
|
135
|
+
export async function buildFsDiffToolEffects(handle, symDiffPaths) {
|
|
136
|
+
if (symDiffPaths.length === 0)
|
|
137
|
+
return Object.freeze([]);
|
|
138
|
+
const existingPathsAtBaseRef = [];
|
|
139
|
+
const proposedContent = {};
|
|
140
|
+
for (const relPath of symDiffPaths) {
|
|
141
|
+
const checkBase = await runGitCommand({
|
|
142
|
+
cwd: handle.worktreePath,
|
|
143
|
+
args: ['cat-file', '-e', `${handle.baseRef}:${relPath}`],
|
|
144
|
+
allowNonZeroExit: true,
|
|
145
|
+
});
|
|
146
|
+
if (checkBase.exitCode === 0)
|
|
147
|
+
existingPathsAtBaseRef.push(relPath);
|
|
148
|
+
const content = await readFile(path.join(handle.worktreePath, relPath), 'utf8').catch(() => undefined);
|
|
149
|
+
if (content !== undefined)
|
|
150
|
+
proposedContent[relPath] = content;
|
|
151
|
+
}
|
|
152
|
+
return Object.freeze([
|
|
153
|
+
Object.freeze({
|
|
154
|
+
kind: 'fs:effect',
|
|
155
|
+
mutatesScope: true,
|
|
156
|
+
attributes: Object.freeze({
|
|
157
|
+
mode: 'write',
|
|
158
|
+
paths: Object.freeze([...symDiffPaths]),
|
|
159
|
+
existingPathsAtBaseRef: Object.freeze(existingPathsAtBaseRef),
|
|
160
|
+
proposedContent: Object.freeze(proposedContent),
|
|
161
|
+
}),
|
|
162
|
+
}),
|
|
163
|
+
]);
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=porcelain-v2-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"porcelain-v2-parser.js","sourceRoot":"","sources":["../../../src/executors/internal/porcelain-v2-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves `baseBranch` against `origin/main` before rebasing in `git.commitAndPush`.
|
|
3
|
+
*
|
|
4
|
+
* Falls back to `'main'` when a prerequisite branch was squash-merged and deleted, or throws if closed unmerged.
|
|
5
|
+
*
|
|
6
|
+
* @param {string} cwd - Worktree directory path.
|
|
7
|
+
* @param {string} candidateBaseBranch - Recorded base branch name on the worktree handle.
|
|
8
|
+
* @param {string} preStepBaseRef - Recorded `baseRef` commit SHA prior to `commitAndPush`.
|
|
9
|
+
*
|
|
10
|
+
* @returns {Promise<string>} Resolved upstream branch name (`'main'` or active prerequisite branch).
|
|
11
|
+
*/
|
|
12
|
+
export declare function resolveEffectiveBaseBranch(cwd: string, candidateBaseBranch: string, preStepBaseRef: string): Promise<string>;
|
|
13
|
+
//# sourceMappingURL=resolve-effective-base-branch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-effective-base-branch.d.ts","sourceRoot":"","sources":["../../../src/executors/internal/resolve-effective-base-branch.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,MAAM,EACX,mBAAmB,EAAE,MAAM,EAC3B,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,MAAM,CAAC,CAuBjB"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { runGitCommand } from './git-cli-runner.js';
|
|
2
|
+
/**
|
|
3
|
+
* Resolves `baseBranch` against `origin/main` before rebasing in `git.commitAndPush`.
|
|
4
|
+
*
|
|
5
|
+
* Falls back to `'main'` when a prerequisite branch was squash-merged and deleted, or throws if closed unmerged.
|
|
6
|
+
*
|
|
7
|
+
* @param {string} cwd - Worktree directory path.
|
|
8
|
+
* @param {string} candidateBaseBranch - Recorded base branch name on the worktree handle.
|
|
9
|
+
* @param {string} preStepBaseRef - Recorded `baseRef` commit SHA prior to `commitAndPush`.
|
|
10
|
+
*
|
|
11
|
+
* @returns {Promise<string>} Resolved upstream branch name (`'main'` or active prerequisite branch).
|
|
12
|
+
*/
|
|
13
|
+
export async function resolveEffectiveBaseBranch(cwd, candidateBaseBranch, preStepBaseRef) {
|
|
14
|
+
if (candidateBaseBranch === 'main')
|
|
15
|
+
return 'main';
|
|
16
|
+
const remoteBranch = await runGitCommand({
|
|
17
|
+
cwd,
|
|
18
|
+
args: ['rev-parse', '--verify', `refs/remotes/origin/${candidateBaseBranch}`],
|
|
19
|
+
allowNonZeroExit: true,
|
|
20
|
+
});
|
|
21
|
+
const isAncestor = await runGitCommand({
|
|
22
|
+
cwd,
|
|
23
|
+
args: ['merge-base', '--is-ancestor', preStepBaseRef, 'refs/remotes/origin/main'],
|
|
24
|
+
allowNonZeroExit: true,
|
|
25
|
+
});
|
|
26
|
+
const cherryRes = await runGitCommand({
|
|
27
|
+
cwd,
|
|
28
|
+
args: ['cherry', 'refs/remotes/origin/main', preStepBaseRef],
|
|
29
|
+
allowNonZeroExit: true,
|
|
30
|
+
});
|
|
31
|
+
const allCommitsApplied = cherryRes.exitCode === 0 && !cherryRes.stdout.split('\n').some((line) => line.startsWith('+ '));
|
|
32
|
+
if (isAncestor.exitCode === 0 || allCommitsApplied)
|
|
33
|
+
return 'main';
|
|
34
|
+
if (remoteBranch.exitCode === 0)
|
|
35
|
+
return candidateBaseBranch;
|
|
36
|
+
throw new Error(`Prerequisite branch '${candidateBaseBranch}' was closed or deleted on origin without merging into 'origin/main'.`);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=resolve-effective-base-branch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-effective-base-branch.js","sourceRoot":"","sources":["../../../src/executors/internal/resolve-effective-base-branch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,GAAW,EACX,mBAA2B,EAC3B,cAAsB;IAEtB,IAAI,mBAAmB,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IAClD,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC;QACvC,GAAG;QACH,IAAI,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,uBAAuB,mBAAmB,EAAE,CAAC;QAC7E,gBAAgB,EAAE,IAAI;KACvB,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC;QACrC,GAAG;QACH,IAAI,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,0BAA0B,CAAC;QACjF,gBAAgB,EAAE,IAAI;KACvB,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC;QACpC,GAAG;QACH,IAAI,EAAE,CAAC,QAAQ,EAAE,0BAA0B,EAAE,cAAc,CAAC;QAC5D,gBAAgB,EAAE,IAAI;KACvB,CAAC,CAAC;IACH,MAAM,iBAAiB,GAAG,SAAS,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1H,IAAI,UAAU,CAAC,QAAQ,KAAK,CAAC,IAAI,iBAAiB;QAAE,OAAO,MAAM,CAAC;IAClE,IAAI,YAAY,CAAC,QAAQ,KAAK,CAAC;QAAE,OAAO,mBAAmB,CAAC;IAC5D,MAAM,IAAI,KAAK,CACb,wBAAwB,mBAAmB,uEAAuE,CACnH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { GitCommitAndPushNode, GitWorktreeHandle, StepExecutionContext } from '@paraharness/core';
|
|
2
|
+
/**
|
|
3
|
+
* Executes the atomic squash, rebase, verify, and `--force-with-lease` push sequence for `git.commitAndPush`.
|
|
4
|
+
*
|
|
5
|
+
* Persists `inFlightCommitAndPush` before mutating `HEAD` and rolls back to `preStepHeadSha` on any failure.
|
|
6
|
+
*
|
|
7
|
+
* @param {GitCommitAndPushNode<unknown>} node - Commit-and-push step AST node.
|
|
8
|
+
* @param {unknown} parsedInput - Validated step input payload.
|
|
9
|
+
* @param {StepExecutionContext<GitWorktreeHandle>} ctx - Active step execution context.
|
|
10
|
+
*
|
|
11
|
+
* @returns {Promise<void>} Resolves once the squashed branch is pushed and `rootHandle` lineage is updated.
|
|
12
|
+
*/
|
|
13
|
+
export declare function runSquashRebaseAndPush(node: GitCommitAndPushNode<unknown>, parsedInput: unknown, ctx: StepExecutionContext<GitWorktreeHandle>): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=squash-rebase-and-push.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"squash-rebase-and-push.d.ts","sourceRoot":"","sources":["../../../src/executors/internal/squash-rebase-and-push.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAwM3B;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,oBAAoB,CAAC,OAAO,CAAC,EACnC,WAAW,EAAE,OAAO,EACpB,GAAG,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,GAC3C,OAAO,CAAC,IAAI,CAAC,CAwDf"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { readHarnessMeta, runGitCommand, updateWorktreeHandleInPlace, writeHarnessMeta, } from './git-cli-runner.js';
|
|
2
|
+
import { evaluateWorktreeCheck } from './git-merge-train-bisect.js';
|
|
3
|
+
import { gitWorktreeFlushCleanParentChanges } from './git-worktree-flush-and-prune.js';
|
|
4
|
+
import { resolveEffectiveCheckpointPolicy } from './git-worktree-reattach.js';
|
|
5
|
+
import { resolveEffectiveBaseBranch } from './resolve-effective-base-branch.js';
|
|
6
|
+
/**
|
|
7
|
+
* Resolves symbolic `EnvRef` entries configured on `node.env` via `ctx.resolveEnv`.
|
|
8
|
+
*
|
|
9
|
+
* @param {GitCommitAndPushNode<unknown>} node - Commit-and-push step AST node.
|
|
10
|
+
* @param {StepExecutionContext<GitWorktreeHandle>} ctx - Active step execution context.
|
|
11
|
+
*
|
|
12
|
+
* @returns {Readonly<Record<string, string | undefined>>} Resolved environment variable map.
|
|
13
|
+
*/
|
|
14
|
+
function resolveCommitAndPushEnv(node, ctx) {
|
|
15
|
+
const env = {};
|
|
16
|
+
if (node.env !== undefined) {
|
|
17
|
+
for (const [key, refOrValue] of Object.entries(node.env)) {
|
|
18
|
+
env[key] = ctx.resolveEnv(refOrValue);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return Object.freeze(env);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Rolls back an interrupted or failed `git.commitAndPush` execution to `preStepHeadSha` and `preStepBaseRef`.
|
|
25
|
+
*
|
|
26
|
+
* @param {GitWorktreeHandle} rootHandle - Active root worktree handle.
|
|
27
|
+
* @param {HarnessMetaRecord} meta - Current `harness-meta.json` record containing `inFlightCommitAndPush`.
|
|
28
|
+
* @param {Readonly<Record<string, string | undefined>>} env - Resolved environment variables.
|
|
29
|
+
*
|
|
30
|
+
* @returns {Promise<void>} Resolves once `HEAD`, `baseRef`, and `harness-meta.json` are restored.
|
|
31
|
+
*/
|
|
32
|
+
async function rollbackFailedCommitAndPush(rootHandle, meta, env) {
|
|
33
|
+
const inFlight = meta.inFlightCommitAndPush;
|
|
34
|
+
if (inFlight === undefined)
|
|
35
|
+
return;
|
|
36
|
+
const cwd = rootHandle.worktreePath;
|
|
37
|
+
await runGitCommand({ cwd, args: ['rebase', '--abort'], env, allowNonZeroExit: true });
|
|
38
|
+
await runGitCommand({ cwd, args: ['reset', '--hard', inFlight.preStepHeadSha], env });
|
|
39
|
+
const restoredMeta = {
|
|
40
|
+
...meta,
|
|
41
|
+
baseRef: inFlight.preStepBaseRef,
|
|
42
|
+
inFlightCommitAndPush: undefined,
|
|
43
|
+
};
|
|
44
|
+
await writeHarnessMeta(rootHandle.gitDirPath, restoredMeta);
|
|
45
|
+
updateWorktreeHandleInPlace(rootHandle, {
|
|
46
|
+
baseRef: inFlight.preStepBaseRef,
|
|
47
|
+
headRef: inFlight.preStepHeadSha,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Fetches `origin`, resolves the effective stacked-PR base branch, synthesizes a single squashed commit over
|
|
52
|
+
* `preStepBaseRef`, and rebases `HEAD` onto `origin/<resolvedBaseBranch>`.
|
|
53
|
+
*
|
|
54
|
+
* @param {SquashRebasePhaseParams} params - Squash and rebase phase parameters.
|
|
55
|
+
*
|
|
56
|
+
* @returns {Promise<readonly [string, string]>} Tuple of `[resolvedBaseBranch, upstreamSha]`.
|
|
57
|
+
*/
|
|
58
|
+
async function squashAndRebaseOntoUpstream(params) {
|
|
59
|
+
const { rootHandle, inFlightMeta, preStepHeadSha, preStepBaseRef, commitMessage, env, } = params;
|
|
60
|
+
const cwd = rootHandle.worktreePath;
|
|
61
|
+
await runGitCommand({
|
|
62
|
+
cwd,
|
|
63
|
+
args: ['fetch', 'origin'],
|
|
64
|
+
env,
|
|
65
|
+
allowNonZeroExit: true,
|
|
66
|
+
});
|
|
67
|
+
const resolvedBaseBranch = await resolveEffectiveBaseBranch(cwd, inFlightMeta.baseBranch || rootHandle.baseBranch || 'main', preStepBaseRef);
|
|
68
|
+
const treeSha = (await runGitCommand({
|
|
69
|
+
cwd,
|
|
70
|
+
args: ['rev-parse', `${preStepHeadSha}^{tree}`],
|
|
71
|
+
env,
|
|
72
|
+
})).stdout.trim();
|
|
73
|
+
const squashedSha = (await runGitCommand({
|
|
74
|
+
cwd,
|
|
75
|
+
args: ['commit-tree', treeSha, '-p', preStepBaseRef, '-m', commitMessage],
|
|
76
|
+
env,
|
|
77
|
+
})).stdout.trim();
|
|
78
|
+
await runGitCommand({ cwd, args: ['reset', '--hard', squashedSha], env });
|
|
79
|
+
const remoteRefCheck = await runGitCommand({
|
|
80
|
+
cwd,
|
|
81
|
+
args: [
|
|
82
|
+
'rev-parse',
|
|
83
|
+
'--verify',
|
|
84
|
+
`refs/remotes/origin/${resolvedBaseBranch}`,
|
|
85
|
+
],
|
|
86
|
+
env,
|
|
87
|
+
allowNonZeroExit: true,
|
|
88
|
+
});
|
|
89
|
+
const upstreamRef = remoteRefCheck.exitCode === 0
|
|
90
|
+
? `refs/remotes/origin/${resolvedBaseBranch}`
|
|
91
|
+
: resolvedBaseBranch;
|
|
92
|
+
const upstreamSha = (await runGitCommand({ cwd, args: ['rev-parse', upstreamRef], env })).stdout.trim();
|
|
93
|
+
await runGitCommand({
|
|
94
|
+
cwd,
|
|
95
|
+
args: ['rebase', '--onto', upstreamSha, preStepBaseRef, 'HEAD'],
|
|
96
|
+
env,
|
|
97
|
+
});
|
|
98
|
+
return [resolvedBaseBranch, upstreamSha];
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Pushes the verified `HEAD` commit to `origin` with `--force-with-lease` and updates `harness-meta.json` and `rootHandle`.
|
|
102
|
+
*
|
|
103
|
+
* @param {SquashRebasePhaseParams} params - Push and finalization parameters.
|
|
104
|
+
* @param {string} resolvedBaseBranch - Resolved effective base branch name.
|
|
105
|
+
* @param {string} upstreamSha - Commit SHA of `origin/<resolvedBaseBranch>`.
|
|
106
|
+
*
|
|
107
|
+
* @returns {Promise<void>} Resolves once `origin` is updated and `rootHandle` lineage is finalized.
|
|
108
|
+
*/
|
|
109
|
+
async function pushAndFinalizeRootLineage(params, resolvedBaseBranch, upstreamSha) {
|
|
110
|
+
const { rootHandle, inFlightMeta, targetBranch, env } = params;
|
|
111
|
+
const cwd = rootHandle.worktreePath;
|
|
112
|
+
await runGitCommand({
|
|
113
|
+
cwd,
|
|
114
|
+
args: [
|
|
115
|
+
'push',
|
|
116
|
+
'--force-with-lease',
|
|
117
|
+
'origin',
|
|
118
|
+
`HEAD:refs/heads/${targetBranch}`,
|
|
119
|
+
],
|
|
120
|
+
env,
|
|
121
|
+
});
|
|
122
|
+
const pushedCommitSha = (await runGitCommand({ cwd, args: ['rev-parse', 'HEAD'], env })).stdout.trim();
|
|
123
|
+
await writeHarnessMeta(rootHandle.gitDirPath, {
|
|
124
|
+
...inFlightMeta,
|
|
125
|
+
baseRef: upstreamSha,
|
|
126
|
+
baseBranch: resolvedBaseBranch,
|
|
127
|
+
branchName: targetBranch,
|
|
128
|
+
inFlightCommitAndPush: undefined,
|
|
129
|
+
});
|
|
130
|
+
updateWorktreeHandleInPlace(rootHandle, {
|
|
131
|
+
baseRef: upstreamSha,
|
|
132
|
+
baseBranch: resolvedBaseBranch,
|
|
133
|
+
branchName: targetBranch,
|
|
134
|
+
headRef: pushedCommitSha,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Executes the atomic squash, rebase, verify, and `--force-with-lease` push sequence for `git.commitAndPush`.
|
|
139
|
+
*
|
|
140
|
+
* Persists `inFlightCommitAndPush` before mutating `HEAD` and rolls back to `preStepHeadSha` on any failure.
|
|
141
|
+
*
|
|
142
|
+
* @param {GitCommitAndPushNode<unknown>} node - Commit-and-push step AST node.
|
|
143
|
+
* @param {unknown} parsedInput - Validated step input payload.
|
|
144
|
+
* @param {StepExecutionContext<GitWorktreeHandle>} ctx - Active step execution context.
|
|
145
|
+
*
|
|
146
|
+
* @returns {Promise<void>} Resolves once the squashed branch is pushed and `rootHandle` lineage is updated.
|
|
147
|
+
*/
|
|
148
|
+
export async function runSquashRebaseAndPush(node, parsedInput, ctx) {
|
|
149
|
+
const rootHandle = ctx.scopeHandle;
|
|
150
|
+
const cwd = rootHandle.worktreePath;
|
|
151
|
+
const scopeNode = ctx.scopeNode?.type === 'git:cow-worktree' ? ctx.scopeNode : undefined;
|
|
152
|
+
const effectivePolicy = scopeNode !== undefined
|
|
153
|
+
? resolveEffectiveCheckpointPolicy(scopeNode)
|
|
154
|
+
: undefined;
|
|
155
|
+
const env = resolveCommitAndPushEnv(node, ctx);
|
|
156
|
+
await gitWorktreeFlushCleanParentChanges(rootHandle, effectivePolicy?.excludeGlobs);
|
|
157
|
+
const preStepHeadSha = (await runGitCommand({ cwd, args: ['rev-parse', 'HEAD'], env })).stdout.trim();
|
|
158
|
+
const initialMeta = await readHarnessMeta(rootHandle.gitDirPath);
|
|
159
|
+
const preStepBaseRef = initialMeta.baseRef;
|
|
160
|
+
const targetBranch = node.branch(parsedInput);
|
|
161
|
+
const commitMessage = node.message(parsedInput);
|
|
162
|
+
const inFlightMeta = {
|
|
163
|
+
...initialMeta,
|
|
164
|
+
inFlightCommitAndPush: { preStepHeadSha, preStepBaseRef, targetBranch },
|
|
165
|
+
};
|
|
166
|
+
await writeHarnessMeta(rootHandle.gitDirPath, inFlightMeta);
|
|
167
|
+
const phaseParams = {
|
|
168
|
+
rootHandle,
|
|
169
|
+
inFlightMeta,
|
|
170
|
+
preStepHeadSha,
|
|
171
|
+
preStepBaseRef,
|
|
172
|
+
targetBranch,
|
|
173
|
+
commitMessage,
|
|
174
|
+
env,
|
|
175
|
+
};
|
|
176
|
+
try {
|
|
177
|
+
const [resolvedBaseBranch, upstreamSha] = await squashAndRebaseOntoUpstream(phaseParams);
|
|
178
|
+
const verifyCheck = scopeNode?.reconcileStrategy?.verifyWith;
|
|
179
|
+
if (verifyCheck !== undefined) {
|
|
180
|
+
const checkOutcome = await evaluateWorktreeCheck(verifyCheck, ctx);
|
|
181
|
+
if (!checkOutcome.ok) {
|
|
182
|
+
throw new Error(`Reconcile verification check '${verifyCheck.id}' failed: ${checkOutcome.deficits.join('; ')}`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
await pushAndFinalizeRootLineage(phaseParams, resolvedBaseBranch, upstreamSha);
|
|
186
|
+
}
|
|
187
|
+
catch (err) {
|
|
188
|
+
await rollbackFailedCommitAndPush(rootHandle, inFlightMeta, env);
|
|
189
|
+
throw err;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=squash-rebase-and-push.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"squash-rebase-and-push.js","sourceRoot":"","sources":["../../../src/executors/internal/squash-rebase-and-push.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { OversizedUntrackedBlobRecord } from '../git-checkpoint-payload.js';
|
|
2
|
+
/**
|
|
3
|
+
* Staged checkpoint tree SHA and spilled oversized untracked blob metadata.
|
|
4
|
+
*/
|
|
5
|
+
export interface StagedCheckpointTreeResult {
|
|
6
|
+
/** Resolved `HEAD` commit SHA at the moment the checkpoint was staged. */
|
|
7
|
+
readonly headSha: string;
|
|
8
|
+
/** Root Git tree SHA produced by `git write-tree` on the temporary index. */
|
|
9
|
+
readonly treeSha: string;
|
|
10
|
+
/** Map of repository-relative untracked paths exceeding `maxUntrackedBytes` to spilled blob descriptors. */
|
|
11
|
+
readonly oversizedUntrackedBlobs: Readonly<Record<string, OversizedUntrackedBlobRecord>>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=staged-checkpoint-tree-result.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staged-checkpoint-tree-result.d.ts","sourceRoot":"","sources":["../../../src/executors/internal/staged-checkpoint-tree-result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAEjF;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,4GAA4G;IAC5G,QAAQ,CAAC,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC,CAAC;CAC1F"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staged-checkpoint-tree-result.js","sourceRoot":"","sources":["../../../src/executors/internal/staged-checkpoint-tree-result.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stateless 3-way `git merge-tree --write-tree -z` execution result.
|
|
3
|
+
*/
|
|
4
|
+
export interface StatelessMergeTreeResult {
|
|
5
|
+
/** Whether the 3-way merge completed without file-level or content-level conflicts. */
|
|
6
|
+
readonly clean: boolean;
|
|
7
|
+
/** Top-level Git tree SHA synthesized by `git merge-tree --write-tree`. */
|
|
8
|
+
readonly mergedTreeSha: string;
|
|
9
|
+
/** Posix-normalized repository-relative paths that suffered 3-way merge conflicts. */
|
|
10
|
+
readonly conflictedPaths: readonly string[];
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=stateless-merge-tree-result.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stateless-merge-tree-result.d.ts","sourceRoot":"","sources":["../../../src/executors/internal/stateless-merge-tree-result.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,uFAAuF;IACvF,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,2EAA2E;IAC3E,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,sFAAsF;IACtF,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stateless-merge-tree-result.js","sourceRoot":"","sources":["../../../src/executors/internal/stateless-merge-tree-result.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Synthesized tree SHA and commit SHA produced by staging a worktree's state into a temporary index.
|
|
3
|
+
*/
|
|
4
|
+
export interface SynthesizedWorkingTreeCommit {
|
|
5
|
+
/** Root Git tree SHA produced by `git write-tree` against the temporary index. */
|
|
6
|
+
readonly treeSha: string;
|
|
7
|
+
/** Synthesized Git commit SHA produced by `git commit-tree` over `parentCommitSha`. */
|
|
8
|
+
readonly commitSha: string;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=synthesized-working-tree-commit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synthesized-working-tree-commit.d.ts","sourceRoot":"","sources":["../../../src/executors/internal/synthesized-working-tree-commit.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,kFAAkF;IAClF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,uFAAuF;IACvF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synthesized-working-tree-commit.js","sourceRoot":"","sources":["../../../src/executors/internal/synthesized-working-tree-commit.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worktree-local `.git` and `node_modules` integrity verification verdict.
|
|
3
|
+
*/
|
|
4
|
+
export interface WorktreeIntegrityVerdict {
|
|
5
|
+
/** Whether all worktree-local `.git` metadata and `node_modules` match the baseline checkpoint. */
|
|
6
|
+
readonly intact: boolean;
|
|
7
|
+
/** Human-readable description of the tampered artifact when `intact` is `false`. */
|
|
8
|
+
readonly reason?: string;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=worktree-integrity-verdict.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree-integrity-verdict.d.ts","sourceRoot":"","sources":["../../../src/executors/internal/worktree-integrity-verdict.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,mGAAmG;IACnG,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,oFAAoF;IACpF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree-integrity-verdict.js","sourceRoot":"","sources":["../../../src/executors/internal/worktree-integrity-verdict.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured porcelain v2 status snapshot returned by `computeWorktreeStatusMap`.
|
|
3
|
+
*
|
|
4
|
+
* Separates tracked/untracked dirty file digests (`statusMap`), untracked path keys (`untrackedPaths`),
|
|
5
|
+
* tracked deleted path keys (`deletedPaths`), and matched ignored paths (`ignoredPaths`).
|
|
6
|
+
*/
|
|
7
|
+
export interface WorktreeStatusSnapshot {
|
|
8
|
+
/** Map from repository-relative file path to `${mode}:${sha256}` (or `'DELETED'`). */
|
|
9
|
+
readonly statusMap: Readonly<Record<string, string>>;
|
|
10
|
+
/** Set of repository-relative paths reported as untracked (`?`). */
|
|
11
|
+
readonly untrackedPaths: ReadonlySet<string>;
|
|
12
|
+
/** Set of repository-relative tracked paths deleted in the working tree. */
|
|
13
|
+
readonly deletedPaths: ReadonlySet<string>;
|
|
14
|
+
/** List of ignored paths reported when `--ignored=matching` is active. */
|
|
15
|
+
readonly ignoredPaths: readonly string[];
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=worktree-status-snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree-status-snapshot.d.ts","sourceRoot":"","sources":["../../../src/executors/internal/worktree-status-snapshot.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,sFAAsF;IACtF,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,oEAAoE;IACpE,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7C,4EAA4E;IAC5E,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3C,0EAA0E;IAC1E,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C"}
|