Skip to content

Commit 1046c12

Browse files
committed
feat: --continue
Signed-off-by: Kipras Melnikovas <[email protected]>
1 parent 0c749eb commit 1046c12

File tree

1 file changed

+48
-2
lines changed

1 file changed

+48
-2
lines changed

git-stacked-rebase.ts

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ export type OptionsForGitStackedRebase = {
4141

4242
viewTodoOnly: boolean;
4343
apply: boolean;
44+
continue: boolean;
4445
push: boolean;
4546
forcePush: boolean;
4647

@@ -61,6 +62,7 @@ export const getDefaultOptions = (): OptionsForGitStackedRebase => ({
6162
gitCmd: process.env.GIT_CMD ?? defaultGitCmd,
6263
viewTodoOnly: false,
6364
apply: false,
65+
continue: false,
6466
push: false,
6567
forcePush: false,
6668
branchSequencer: false,
@@ -73,6 +75,7 @@ function areOptionsIncompetible(
7375
): boolean {
7476
if (options.viewTodoOnly) {
7577
if (options.apply) reasons.push("--apply cannot be used together with --view-todo");
78+
if (options.continue) reasons.push("--continue cannot be used together with --view-todo");
7679
if (options.push) reasons.push("--push cannot be used together with --view-todo");
7780
if (options.forcePush) reasons.push("--push --force cannot be used together with --view-todo");
7881
if (options.branchSequencer) reasons.push("--branch-sequencer cannot be used together with --view-todo");
@@ -284,6 +287,8 @@ export const gitStackedRebase = async (
284287
const pathToStackedRebaseDirInsideDotGit: string = parsed.pathToStackedRebaseDirInsideDotGit;
285288
const pathToStackedRebaseTodoFile: string = parsed.pathToStackedRebaseTodoFile;
286289

290+
const checkIsRegularRebaseStillInProgress = (): boolean => fs.existsSync(pathToRegularRebaseDirInsideDotGit);
291+
287292
if (fs.existsSync(path.join(pathToStackedRebaseDirInsideDotGit, filenames.willNeedToApply))) {
288293
_markThatNeedsToApply(pathToStackedRebaseDirInsideDotGit);
289294
}
@@ -298,6 +303,35 @@ export const gitStackedRebase = async (
298303
});
299304
}
300305

306+
if (options.continue) {
307+
execSyncInRepo(`${options.gitCmd} rebase --continue`);
308+
309+
if (checkIsRegularRebaseStillInProgress()) {
310+
/**
311+
* still not done - further `--continue`s will be needed.
312+
*/
313+
return;
314+
}
315+
316+
console.log("after --continue, rebase done. trying to --apply");
317+
318+
/**
319+
* rebase has finished. we can try to --apply now
320+
* so that the partial branches do not get out of sync.
321+
*/
322+
await applyIfNeedsToApply({
323+
repo,
324+
pathToStackedRebaseTodoFile,
325+
pathToStackedRebaseDirInsideDotGit, //
326+
rootLevelCommandName: "--apply (automatically after --continue)",
327+
gitCmd: options.gitCmd,
328+
autoApplyIfNeeded: configValues.autoApplyIfNeeded,
329+
config,
330+
});
331+
332+
return;
333+
}
334+
301335
const { neededToApply, userAllowedToApplyAndWeApplied, markThatNeedsToApply } = await applyIfNeedsToApply({
302336
repo,
303337
pathToStackedRebaseTodoFile,
@@ -357,7 +391,7 @@ export const gitStackedRebase = async (
357391
);
358392
const currentBranch: Git.Reference = await repo.getCurrentBranch();
359393

360-
const wasRegularRebaseInProgress: boolean = fs.existsSync(pathToRegularRebaseDirInsideDotGit);
394+
const wasRegularRebaseInProgress: boolean = checkIsRegularRebaseStillInProgress();
361395
// const
362396

363397
console.log({ wasRegularRebaseInProgress });
@@ -1341,6 +1375,16 @@ git-stacked-rebase <branch> [-a|--apply]
13411375
2. but wil not push the partial branches to a remote until --push --force is used.
13421376
13431377
1378+
git-stacked-rebase <branch> [-c|--continue]
1379+
1380+
(!) should be used instead of git-rebase's --continue
1381+
1382+
...because, additionally to invoking git rebase --continue,
1383+
this option automatically (prompts you to) --apply (if the rebase
1384+
has finished), thus ensuring that the partial branches
1385+
do not go out of sync with the newly rewritten history.
1386+
1387+
13441388
git-stacked-rebase <branch> [--push|-p --force|-f]
13451389
13461390
1. will checkout each branch and will push --force,
@@ -1446,10 +1490,11 @@ git-stacked-rebase ${gitStackedRebaseVersionStr} __BUILD_DATE_REPLACEMENT_STR__
14461490
const isViewTodoOnly: boolean =
14471491
!!second && ["--view-todo", "-v", "--view-only", "--view-todo-only"].includes(second);
14481492
const isApply: boolean = !!second && ["--apply", "-a"].includes(second);
1493+
const isContinue: boolean = !!second && ["--continue", "-c"].includes(second);
14491494
const isPush: boolean = !!second && ["--push", "-p"].includes(second);
14501495
const isBranchSequencer: boolean = !!second && ["--branch-sequencer", "--bs", "-s"].includes(second);
14511496

1452-
if (isViewTodoOnly || isApply || isPush || isBranchSequencer) {
1497+
if (isViewTodoOnly || isContinue || isApply || isPush || isBranchSequencer) {
14531498
eatNextArg();
14541499
}
14551500

@@ -1499,6 +1544,7 @@ git-stacked-rebase ${gitStackedRebaseVersionStr} __BUILD_DATE_REPLACEMENT_STR__
14991544
gitDir,
15001545
viewTodoOnly: isViewTodoOnly,
15011546
apply: isApply,
1547+
continue: isContinue,
15021548
push: isPush,
15031549
forcePush: isForcePush,
15041550
branchSequencer: isBranchSequencer,

0 commit comments

Comments
 (0)