@g-abhishek/gitx 0.1.4 → 0.1.6
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/README.md +82 -13
- package/dist/ai/claudeAi.d.ts.map +1 -1
- package/dist/ai/claudeAi.js +4 -30
- package/dist/ai/claudeAi.js.map +1 -1
- package/dist/ai/claudeCliAi.d.ts.map +1 -1
- package/dist/ai/claudeCliAi.js +4 -21
- package/dist/ai/claudeCliAi.js.map +1 -1
- package/dist/ai/openAiAi.d.ts.map +1 -1
- package/dist/ai/openAiAi.js +4 -30
- package/dist/ai/openAiAi.js.map +1 -1
- package/dist/ai/reviewHelpers.d.ts +24 -0
- package/dist/ai/reviewHelpers.d.ts.map +1 -1
- package/dist/ai/reviewHelpers.js +123 -39
- package/dist/ai/reviewHelpers.js.map +1 -1
- package/dist/cli/commands/pr/cherryPick.d.ts +25 -0
- package/dist/cli/commands/pr/cherryPick.d.ts.map +1 -0
- package/dist/cli/commands/pr/cherryPick.js +317 -0
- package/dist/cli/commands/pr/cherryPick.js.map +1 -0
- package/dist/cli/commands/pr/fixComments.d.ts +5 -2
- package/dist/cli/commands/pr/fixComments.d.ts.map +1 -1
- package/dist/cli/commands/pr/fixComments.js +5 -82
- package/dist/cli/commands/pr/fixComments.js.map +1 -1
- package/dist/cli/commands/pr/index.d.ts.map +1 -1
- package/dist/cli/commands/pr/index.js +6 -2
- package/dist/cli/commands/pr/index.js.map +1 -1
- package/dist/cli/commands/pr/port.d.ts +34 -0
- package/dist/cli/commands/pr/port.d.ts.map +1 -0
- package/dist/cli/commands/pr/port.js +453 -0
- package/dist/cli/commands/pr/port.js.map +1 -0
- package/dist/cli/commands/pr/resolve.d.ts +3 -0
- package/dist/cli/commands/pr/resolve.d.ts.map +1 -0
- package/dist/cli/commands/pr/resolve.js +92 -0
- package/dist/cli/commands/pr/resolve.js.map +1 -0
- package/dist/cli/commands/pr/review.js +1 -1
- package/dist/cli/commands/pr/review.js.map +1 -1
- package/dist/cli/commands/sync.d.ts +12 -11
- package/dist/cli/commands/sync.d.ts.map +1 -1
- package/dist/cli/commands/sync.js +13 -101
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/utils/gitOps.d.ts +11 -4
- package/dist/utils/gitOps.d.ts.map +1 -1
- package/dist/utils/gitOps.js +53 -37
- package/dist/utils/gitOps.js.map +1 -1
- package/dist/workflows/pr.d.ts +1 -1
- package/dist/workflows/pr.d.ts.map +1 -1
- package/dist/workflows/pr.js +82 -19
- package/dist/workflows/pr.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cherryPick.js","sourceRoot":"","sources":["../../../../src/cli/commands/pr/cherryPick.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * gitx pr cherry-pick <number>\n *\n * Fetch all commits from a PR and cherry-pick them into the current branch.\n *\n * Use this when you want to pull someone else's PR work (or a PR targeting\n * a different branch) directly onto your own branch — without merging or\n * waiting for the PR to land.\n *\n * Flow:\n * 1. Fetch PR metadata → get head branch + base branch\n * 2. git fetch origin <head> — ensure commits exist locally\n * 3. List commits between base and head (oldest → newest)\n * 4. Show commits + ask for confirmation (skipped with --no-confirm)\n * 5. Cherry-pick each commit with -x flag (records source SHA)\n * 6. On conflict → AI attempts resolution; unresolvable ones pause for manual fix\n *\n * Usage:\n * gitx pr cherry-pick 42 # cherry-pick all commits of PR #42\n * gitx pr cherry-pick 42 --dry-run # list commits without applying\n * gitx pr cherry-pick 42 --no-confirm # skip confirmation prompt\n */\n\nimport type { Command } from \"commander\";\nimport ora from \"ora\";\nimport { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { resolve as resolvePath } from \"node:path\";\nimport { confirm } from \"@inquirer/prompts\";\nimport { logger } from \"../../../logger/logger.js\";\nimport { isInsideGitRepo } from \"../../../utils/git.js\";\nimport { getCurrentBranch } from \"../../../utils/gitOps.js\";\nimport { GitxError } from \"../../../utils/errors.js\";\nimport { Gitx } from \"../../../core/gitx.js\";\nimport { createProvider } from \"../../../providers/factory.js\";\n\nconst execFileAsync = promisify(execFile);\n\n// ─── Git helper ───────────────────────────────────────────────────────────────\n\nasync function git(\n args: string[],\n cwd: string\n): Promise<{ stdout: string; stderr: string; exitCode: number }> {\n try {\n const result = await execFileAsync(\"git\", args, { cwd });\n return { stdout: result.stdout.trim(), stderr: \"\", exitCode: 0 };\n } catch (err: unknown) {\n const e = err as { stdout?: string; stderr?: string; code?: number };\n return {\n stdout: e.stdout?.trim() ?? \"\",\n stderr: e.stderr?.trim() ?? \"\",\n exitCode: e.code ?? 1,\n };\n }\n}\n\n// ─── Conflict detection ───────────────────────────────────────────────────────\n\nasync function getConflictingFiles(cwd: string): Promise<string[]> {\n const { stdout } = await git([\"diff\", \"--name-only\", \"--diff-filter=U\"], cwd);\n return stdout.split(\"\\n\").map((l) => l.trim()).filter(Boolean);\n}\n\n// ─── AI conflict resolution ───────────────────────────────────────────────────\n\nasync function resolveConflictsWithAi(\n conflictFiles: string[],\n cwd: string,\n gitx: Gitx\n): Promise<{ resolved: string[]; needsManual: string[] }> {\n const resolved: string[] = [];\n const needsManual: string[] = [];\n\n for (const filePath of conflictFiles) {\n const absPath = resolvePath(cwd, filePath);\n let content: string;\n try {\n content = await readFile(absPath, \"utf8\");\n } catch {\n needsManual.push(filePath);\n continue;\n }\n\n if (!content.includes(\"<<<<<<<\")) {\n needsManual.push(filePath);\n continue;\n }\n\n const spinner = ora(` 🤖 AI resolving: ${filePath}`).start();\n try {\n const result = await gitx.ai.resolveConflict(filePath, content);\n\n if (result.confidence === \"high\") {\n await writeFile(absPath, result.resolved, \"utf8\");\n spinner.succeed(` ✅ Auto-resolved: ${filePath} — ${result.explanation}`);\n resolved.push(filePath);\n } else {\n spinner.warn(` ⚠️ Low confidence: ${filePath} — ${result.explanation}`);\n logger.info(`\\n AI proposed resolution (low confidence). Preview:\\n`);\n const preview = result.resolved.split(\"\\n\").slice(0, 30).join(\"\\n\");\n logger.info(preview);\n if (result.resolved.split(\"\\n\").length > 30) {\n logger.info(` … (${result.resolved.split(\"\\n\").length - 30} more lines)`);\n }\n logger.info(\"\");\n\n let apply = false;\n try {\n apply = await confirm({\n message: `Apply AI resolution for ${filePath}?`,\n default: true,\n });\n } catch {\n apply = false;\n }\n\n if (apply) {\n await writeFile(absPath, result.resolved, \"utf8\");\n logger.success(` ✅ Applied: ${filePath}`);\n resolved.push(filePath);\n } else {\n logger.info(` ⏭️ Skipped: ${filePath} — resolve manually`);\n needsManual.push(filePath);\n }\n }\n } catch {\n spinner.fail(` ❌ AI resolution failed for: ${filePath}`);\n needsManual.push(filePath);\n }\n }\n\n return { resolved, needsManual };\n}\n\n// ─── Cherry-pick a list of commits ───────────────────────────────────────────\n\nasync function cherryPickCommits(\n commits: Array<{ sha: string; subject: string }>,\n cwd: string,\n gitx: Gitx,\n aiAvailable: boolean\n): Promise<{ status: \"success\" | \"paused\"; remainingIndex: number }> {\n for (let i = 0; i < commits.length; i++) {\n const { sha, subject } = commits[i]!;\n const shortSha = sha.slice(0, 7);\n\n logger.info(`\\n 🍒 [${i + 1}/${commits.length}] ${shortSha} — ${subject}`);\n\n // -x appends \"(cherry picked from commit <sha>)\" to the commit message\n const result = await git([\"cherry-pick\", \"-x\", sha], cwd);\n\n if (result.exitCode === 0) {\n logger.success(` ✓ Applied cleanly`);\n continue;\n }\n\n // Cherry-pick failed — check for conflicts\n const conflictFiles = await getConflictingFiles(cwd);\n\n if (conflictFiles.length === 0) {\n // Empty or already-applied commit\n logger.warn(` ⚠️ Skipping (empty or already applied): ${shortSha}`);\n await git([\"cherry-pick\", \"--skip\"], cwd);\n continue;\n }\n\n logger.warn(`\\n ⚡ Conflicts in ${conflictFiles.length} file(s):`);\n conflictFiles.forEach((f) => logger.info(` • ${f}`));\n\n if (!aiAvailable) {\n // No AI — print manual instructions and pause\n logger.error(`\\n ⛔ Manual conflict resolution needed:`);\n conflictFiles.forEach((f) => logger.warn(` • ${f}`));\n logger.info(`\\n Steps to resolve:`);\n logger.info(` 1. Fix the conflict markers (<<<<, ====, >>>>) in each file`);\n logger.info(` 2. Stage resolved files: git add <file>`);\n logger.info(` 3. Continue: git cherry-pick --continue`);\n logger.info(` 4. Or abort: git cherry-pick --abort`);\n return { status: \"paused\", remainingIndex: i };\n }\n\n const { resolved, needsManual } = await resolveConflictsWithAi(conflictFiles, cwd, gitx);\n\n if (needsManual.length > 0) {\n // Stage auto-resolved files first\n if (resolved.length > 0) {\n await git([\"add\", ...resolved], cwd);\n logger.info(`\\n ✅ Auto-resolved ${resolved.length} file(s) — staged.`);\n }\n\n logger.warn(`\\n ⛔ ${needsManual.length} file(s) need manual resolution:`);\n needsManual.forEach((f) => logger.warn(` • ${f}`));\n logger.info(`\\n Steps to finish:`);\n logger.info(` 1. Fix the conflict markers (<<<<, ====, >>>>) in each file above`);\n logger.info(` 2. Stage resolved files: git add <file>`);\n logger.info(` 3. Continue: git cherry-pick --continue`);\n logger.info(` 4. Resume remaining: gitx pr cherry-pick ${commits.slice(i + 1).map((c) => c.sha.slice(0, 7)).join(\", \")}`);\n logger.info(` Or abort: git cherry-pick --abort`);\n return { status: \"paused\", remainingIndex: i };\n }\n\n // All conflicts resolved — stage and continue\n await git([\"add\", ...resolved], cwd);\n const continueResult = await git([\"cherry-pick\", \"--continue\", \"--no-edit\"], cwd);\n\n if (continueResult.exitCode !== 0) {\n logger.error(` ❌ Could not continue cherry-pick: ${continueResult.stderr}`);\n return { status: \"paused\", remainingIndex: i };\n }\n\n logger.success(` ✅ Conflict resolved and applied`);\n }\n\n return { status: \"success\", remainingIndex: -1 };\n}\n\n// ─── Register command ─────────────────────────────────────────────────────────\n\nexport function registerPrCherryPickCommand(pr: Command): void {\n pr\n .command(\"cherry-pick\")\n .description(\"🍒 Cherry-pick all commits from a PR into the current branch\")\n .argument(\"<number>\", \"PR number whose commits to cherry-pick\")\n .option(\"--dry-run\", \"List the commits that would be cherry-picked without applying them\")\n .option(\"--no-confirm\", \"Skip the confirmation prompt\")\n .action(async (\n prArg: string,\n opts: { dryRun?: boolean; confirm: boolean }\n ) => {\n const cwd = process.cwd();\n\n if (!(await isInsideGitRepo(cwd))) {\n throw new GitxError(\"Not inside a git repository. cd into your project folder first.\", { exitCode: 2 });\n }\n\n const prNumber = parseInt(prArg, 10);\n if (isNaN(prNumber) || prNumber <= 0) {\n throw new GitxError(`Invalid PR number: \"${prArg}\"`, { exitCode: 2 });\n }\n\n const gitx = await Gitx.fromCwd(cwd);\n\n // ── Fetch PR metadata ────────────────────────────────────────────────────\n let ctx;\n try {\n ctx = await gitx.getRepoContext();\n } catch (err: unknown) {\n throw new GitxError(\n `Could not determine repo context: ${err instanceof Error ? err.message : String(err)}`,\n { exitCode: 2 }\n );\n }\n\n const provider = createProvider(ctx);\n\n const prSpinner = ora(`Fetching PR #${prNumber}…`).start();\n let pr;\n try {\n pr = await provider.getPR(ctx.repoSlug, prNumber);\n prSpinner.succeed(`PR #${prNumber}: \"${pr.title}\" (${pr.head} → ${pr.base})`);\n } catch (err: unknown) {\n prSpinner.fail(`Could not fetch PR #${prNumber}: ${err instanceof Error ? err.message : String(err)}`);\n process.exitCode = 1;\n return;\n }\n\n // ── Guard: don't cherry-pick onto the same branch ────────────────────────\n const currentBranch = await getCurrentBranch(cwd);\n if (currentBranch === pr.head) {\n logger.error(`❌ You are already on the PR source branch \"${pr.head}\". Nothing to cherry-pick.`);\n process.exitCode = 1;\n return;\n }\n\n // ── Fetch the PR head branch from origin ─────────────────────────────────\n const fetchSpinner = ora(`Fetching origin/${pr.head}…`).start();\n const fetchResult = await git([\"fetch\", \"origin\", pr.head], cwd);\n if (fetchResult.exitCode !== 0 && !fetchResult.stderr.includes(\"->\")) {\n // If the head branch no longer exists (merged/deleted), try fetching by ref\n // For GitHub PRs: refs/pull/<number>/head\n const refResult = await git(\n [\"fetch\", \"origin\", `refs/pull/${prNumber}/head:refs/remotes/origin/pr/${prNumber}`],\n cwd\n );\n if (refResult.exitCode !== 0) {\n fetchSpinner.warn(`Could not fetch branch \"${pr.head}\" — it may have been deleted after merge.`);\n // Continue with whatever we have locally\n } else {\n fetchSpinner.succeed(`Fetched PR #${prNumber} via refs/pull/${prNumber}/head`);\n }\n } else {\n fetchSpinner.succeed(`Fetched origin/${pr.head}`);\n }\n\n // ── Collect commits: base..head (oldest first) ────────────────────────────\n // Try origin/<head> first; fall back to the special PR ref we fetched above\n const headRef =\n (await git([\"rev-parse\", \"--verify\", `origin/${pr.head}`], cwd)).exitCode === 0\n ? `origin/${pr.head}`\n : `origin/pr/${prNumber}`;\n\n // Base ref — what the PR targets\n const baseRef = `origin/${pr.base}`;\n\n const logResult = await git(\n [\"log\", \"--format=%H %s\", `${baseRef}..${headRef}`],\n cwd\n );\n\n if (logResult.exitCode !== 0 || !logResult.stdout) {\n logger.error(`❌ No commits found between ${baseRef} and ${headRef}.`);\n logger.info(` Make sure the base branch (${pr.base}) exists on origin.`);\n process.exitCode = 1;\n return;\n }\n\n // git log returns newest-first; reverse to oldest-first for cherry-pick\n const commits = logResult.stdout\n .split(\"\\n\")\n .map((l) => l.trim())\n .filter(Boolean)\n .map((line) => {\n const spaceIdx = line.indexOf(\" \");\n return {\n sha: line.slice(0, spaceIdx),\n subject: line.slice(spaceIdx + 1),\n };\n })\n .reverse();\n\n if (commits.length === 0) {\n logger.info(`✅ No commits to cherry-pick — PR #${prNumber} has no new commits relative to ${pr.base}.`);\n return;\n }\n\n // ── Show commit list ──────────────────────────────────────────────────────\n logger.info(`\\n📋 ${commits.length} commit(s) from PR #${prNumber} to cherry-pick into ${currentBranch}:\\n`);\n for (const { sha, subject } of commits) {\n logger.info(` + ${sha.slice(0, 7)} — ${subject}`);\n }\n\n if (opts.dryRun) {\n logger.info(`\\n⏸ Dry run — no commits applied.`);\n return;\n }\n\n // ── Confirmation ──────────────────────────────────────────────────────────\n if (opts.confirm !== false) {\n let proceed = false;\n try {\n proceed = await confirm({\n message: `Cherry-pick ${commits.length} commit(s) onto \"${currentBranch}\"?`,\n default: true,\n });\n } catch {\n proceed = false;\n }\n if (!proceed) {\n logger.info(\"Cancelled.\");\n return;\n }\n }\n\n // ── Cherry-pick ───────────────────────────────────────────────────────────\n logger.info(`\\n🍒 Cherry-picking ${commits.length} commit(s)…`);\n\n const aiAvailable = await Gitx.isAiAvailable(gitx.config);\n if (!aiAvailable) {\n logger.warn(\"⚠️ No AI configured — conflicts will require manual resolution.\");\n }\n\n const result = await cherryPickCommits(commits, cwd, gitx, aiAvailable);\n\n if (result.status === \"paused\") {\n logger.warn(`\\n⚠️ Cherry-pick paused at commit ${commits[result.remainingIndex]?.sha.slice(0, 7) ?? \"?\"}. Resolve conflicts manually then run:`);\n logger.info(` git cherry-pick --continue`);\n process.exitCode = 1;\n return;\n }\n\n logger.success(`\\n✅ All ${commits.length} commit(s) from PR #${prNumber} cherry-picked into \"${currentBranch}\".`);\n logger.info(` Review the changes, then push when ready: gitx push`);\n });\n}\n"]}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated Renamed to `resolve.ts`.
|
|
3
|
+
* This command is now `gitx pr resolve`. Use registerPrResolveCommand from ./resolve.js instead.
|
|
4
|
+
*/
|
|
5
|
+
export { registerPrResolveCommand as registerPrFixCommentsCommand } from "./resolve.js";
|
|
3
6
|
//# sourceMappingURL=fixComments.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixComments.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/pr/fixComments.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"fixComments.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/pr/fixComments.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,wBAAwB,IAAI,4BAA4B,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -1,83 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export function registerPrFixCommentsCommand(pr) {
|
|
7
|
-
pr.command("fix-comments")
|
|
8
|
-
.description("🩹 AI-fix review comments and push changes")
|
|
9
|
-
.argument("<id>", "Pull request number")
|
|
10
|
-
.option("--dry-run", "Preview fixes without applying or committing", false)
|
|
11
|
-
.option("--no-push", "Apply & commit locally but skip push", false)
|
|
12
|
-
.action(async (id, options) => {
|
|
13
|
-
const prNumber = parseInt(id, 10);
|
|
14
|
-
if (isNaN(prNumber) || prNumber <= 0) {
|
|
15
|
-
logger.error(`Invalid PR number: ${id}`);
|
|
16
|
-
process.exit(1);
|
|
17
|
-
}
|
|
18
|
-
const gitx = await Gitx.fromCwd();
|
|
19
|
-
const ctx = await gitx.getRepoContext();
|
|
20
|
-
logger.info(`🩹 Fixing review comments on PR #${prNumber} (${ctx.repoSlug})…\n`);
|
|
21
|
-
// ── AI availability warning ────────────────────────────────────────────
|
|
22
|
-
if (!await Gitx.isAiAvailable(gitx.config)) {
|
|
23
|
-
logger.warn("⚠️ No AI provider configured — AI fix suggestions will be empty.\n" +
|
|
24
|
-
" Run `gitx config` to set up an AI provider (Claude, OpenAI, or claude-cli).");
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
if (!options.dryRun) {
|
|
28
|
-
const { proceed } = await inquirer.prompt([
|
|
29
|
-
{
|
|
30
|
-
type: "confirm",
|
|
31
|
-
name: "proceed",
|
|
32
|
-
message: "This will apply AI-suggested fixes, commit, and push. Continue?",
|
|
33
|
-
default: false,
|
|
34
|
-
},
|
|
35
|
-
]);
|
|
36
|
-
if (!proceed) {
|
|
37
|
-
logger.warn("Cancelled.");
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
// ── Guard: warn about uncommitted changes ────────────────────────────
|
|
42
|
-
if (!options.dryRun) {
|
|
43
|
-
const dirty = await isWorkingTreeDirty(gitx.cwd);
|
|
44
|
-
if (dirty) {
|
|
45
|
-
logger.warn("⚠️ You have uncommitted changes. They may conflict with applied fixes.");
|
|
46
|
-
const { cont } = await inquirer.prompt([
|
|
47
|
-
{ type: "confirm", name: "cont", message: "Continue anyway?", default: false },
|
|
48
|
-
]);
|
|
49
|
-
if (!cont) {
|
|
50
|
-
logger.warn("Cancelled.");
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
const result = await runFixCommentsWorkflow(gitx, prNumber, options.dryRun);
|
|
56
|
-
logger.info(`\n📋 PR: ${result.pr.title}`);
|
|
57
|
-
if (result.appliedFixes.length === 0 && result.skippedFixes.length === 0) {
|
|
58
|
-
logger.info("No actionable review comments found.");
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
if (result.appliedFixes.length > 0) {
|
|
62
|
-
logger.success(`\n✅ Applied ${result.appliedFixes.length} fix(es):`);
|
|
63
|
-
result.appliedFixes.forEach((f) => logger.info(` • ${f.path} — ${f.rationale}`));
|
|
64
|
-
}
|
|
65
|
-
if (result.skippedFixes.length > 0) {
|
|
66
|
-
logger.warn(`\n⚠️ Skipped ${result.skippedFixes.length} fix(es):`);
|
|
67
|
-
result.skippedFixes.forEach((f) => logger.warn(` • ${f.path}: ${f.reason}`));
|
|
68
|
-
}
|
|
69
|
-
// Push if not dry-run and push not disabled
|
|
70
|
-
if (!options.dryRun && options.push !== false && result.appliedFixes.length > 0) {
|
|
71
|
-
const branch = await getCurrentBranch(gitx.cwd);
|
|
72
|
-
logger.info(`\n🚀 Pushing ${branch}…`);
|
|
73
|
-
try {
|
|
74
|
-
await pushBranch(branch, gitx.cwd);
|
|
75
|
-
logger.success("Branch pushed.");
|
|
76
|
-
}
|
|
77
|
-
catch (err) {
|
|
78
|
-
logger.warn(`Push failed: ${String(err.message ?? err)}`);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated Renamed to `resolve.ts`.
|
|
3
|
+
* This command is now `gitx pr resolve`. Use registerPrResolveCommand from ./resolve.js instead.
|
|
4
|
+
*/
|
|
5
|
+
export { registerPrResolveCommand as registerPrFixCommentsCommand } from "./resolve.js";
|
|
83
6
|
//# sourceMappingURL=fixComments.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixComments.js","sourceRoot":"","sources":["../../../../src/cli/commands/pr/fixComments.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fixComments.js","sourceRoot":"","sources":["../../../../src/cli/commands/pr/fixComments.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,wBAAwB,IAAI,4BAA4B,EAAE,MAAM,cAAc,CAAC","sourcesContent":["/**\n * @deprecated Renamed to `resolve.ts`.\n * This command is now `gitx pr resolve`. Use registerPrResolveCommand from ./resolve.js instead.\n */\nexport { registerPrResolveCommand as registerPrFixCommentsCommand } from \"./resolve.js\";\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/pr/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/pr/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAWzD"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { registerPrListCommand } from "./list.js";
|
|
2
2
|
import { registerPrCreateCommand } from "./create.js";
|
|
3
3
|
import { registerPrReviewCommand } from "./review.js";
|
|
4
|
-
import {
|
|
4
|
+
import { registerPrResolveCommand } from "./resolve.js";
|
|
5
|
+
import { registerPrCherryPickCommand } from "./cherryPick.js";
|
|
6
|
+
import { registerPrPortCommand } from "./port.js";
|
|
5
7
|
import { registerPrCloseCommand } from "./close.js";
|
|
6
8
|
import { registerPrMergeCommand } from "./merge.js";
|
|
7
9
|
export function registerPrCommands(program) {
|
|
@@ -10,7 +12,9 @@ export function registerPrCommands(program) {
|
|
|
10
12
|
registerPrCreateCommand(pr);
|
|
11
13
|
registerPrMergeCommand(pr);
|
|
12
14
|
registerPrReviewCommand(pr);
|
|
13
|
-
|
|
15
|
+
registerPrResolveCommand(pr);
|
|
16
|
+
registerPrCherryPickCommand(pr);
|
|
17
|
+
registerPrPortCommand(pr);
|
|
14
18
|
registerPrCloseCommand(pr);
|
|
15
19
|
}
|
|
16
20
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/commands/pr/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/commands/pr/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC;IAEzE,qBAAqB,CAAC,EAAE,CAAC,CAAC;IAC1B,uBAAuB,CAAC,EAAE,CAAC,CAAC;IAC5B,sBAAsB,CAAC,EAAE,CAAC,CAAC;IAC3B,uBAAuB,CAAC,EAAE,CAAC,CAAC;IAC5B,wBAAwB,CAAC,EAAE,CAAC,CAAC;IAC7B,2BAA2B,CAAC,EAAE,CAAC,CAAC;IAChC,qBAAqB,CAAC,EAAE,CAAC,CAAC;IAC1B,sBAAsB,CAAC,EAAE,CAAC,CAAC;AAC7B,CAAC","sourcesContent":["import type { Command } from \"commander\";\nimport { registerPrListCommand } from \"./list.js\";\nimport { registerPrCreateCommand } from \"./create.js\";\nimport { registerPrReviewCommand } from \"./review.js\";\nimport { registerPrResolveCommand } from \"./resolve.js\";\nimport { registerPrCherryPickCommand } from \"./cherryPick.js\";\nimport { registerPrPortCommand } from \"./port.js\";\nimport { registerPrCloseCommand } from \"./close.js\";\nimport { registerPrMergeCommand } from \"./merge.js\";\n\nexport function registerPrCommands(program: Command): void {\n const pr = program.command(\"pr\").description(\"🔀 Pull request commands\");\n\n registerPrListCommand(pr);\n registerPrCreateCommand(pr);\n registerPrMergeCommand(pr);\n registerPrReviewCommand(pr);\n registerPrResolveCommand(pr);\n registerPrCherryPickCommand(pr);\n registerPrPortCommand(pr);\n registerPrCloseCommand(pr);\n}\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* gitx pr port <number> <target1> [target2...]
|
|
3
|
+
*
|
|
4
|
+
* Ports all commits from a PR onto one or more target branches, then opens
|
|
5
|
+
* a new PR for each target — without touching your current working branch.
|
|
6
|
+
*
|
|
7
|
+
* Example:
|
|
8
|
+
* gitx pr port 12345 release/v1 release/v2
|
|
9
|
+
*
|
|
10
|
+
* → Creates port/pr-12345-to-release-v1 from origin/release/v1
|
|
11
|
+
* port/pr-12345-to-release-v2 from origin/release/v2
|
|
12
|
+
* → Cherry-picks all commits from PR #12345 onto each port branch
|
|
13
|
+
* → Pushes both port branches
|
|
14
|
+
* → Opens a PR for each: port branch → target branch
|
|
15
|
+
* → Prints the PR URLs
|
|
16
|
+
*
|
|
17
|
+
* Flow (per target branch):
|
|
18
|
+
* 1. Fetch PR metadata → source branch (head) + base branch
|
|
19
|
+
* 2. git fetch origin <head> — ensure source commits are local
|
|
20
|
+
* 3. Collect commits: origin/<base>..origin/<head> (oldest → newest)
|
|
21
|
+
* 4. Create port/pr-<number>-to-<target> from origin/<target>
|
|
22
|
+
* 5. Cherry-pick each commit with -x; AI resolves conflicts where possible
|
|
23
|
+
* 6. Push port branch
|
|
24
|
+
* 7. Create PR: port branch → target branch; print URL
|
|
25
|
+
*
|
|
26
|
+
* Options:
|
|
27
|
+
* --no-pr Push port branches but skip PR creation
|
|
28
|
+
* --draft Create PRs as drafts
|
|
29
|
+
* --dry-run Show what would happen without making any changes
|
|
30
|
+
* --no-confirm Skip the per-target confirmation prompt
|
|
31
|
+
*/
|
|
32
|
+
import type { Command } from "commander";
|
|
33
|
+
export declare function registerPrPortCommand(pr: Command): void;
|
|
34
|
+
//# sourceMappingURL=port.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/pr/port.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsXzC,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAqMvD"}
|