|
51 | 51 |
|
52 | 52 | import argparse |
53 | 53 | import configparser |
| 54 | +import contextlib |
54 | 55 | import json |
55 | 56 | import logging |
56 | 57 | import os |
@@ -526,6 +527,24 @@ def draft_bitmask_type(value: str) -> list[bool]: |
526 | 527 | return [bool(int(bit)) for bit in value] |
527 | 528 |
|
528 | 529 |
|
| 530 | +@contextlib.contextmanager |
| 531 | +def maybe_stash_interactive_rebase() -> Iterator[None]: |
| 532 | + """ |
| 533 | + If the user is in the middle of an interactive rebase, we stash the |
| 534 | + rebase state so that we can restore it later. This is useful when |
| 535 | + the user is trying to submit only part of their commit history. |
| 536 | + """ |
| 537 | + if os.path.exists(".git/rebase-merge"): |
| 538 | + try: |
| 539 | + assert not os.path.exists(".git/rebase-merge-stashed") |
| 540 | + os.rename(".git/rebase-merge", ".git/rebase-merge-stashed") |
| 541 | + yield |
| 542 | + finally: |
| 543 | + os.rename(".git/rebase-merge-stashed", ".git/rebase-merge") |
| 544 | + else: |
| 545 | + yield |
| 546 | + |
| 547 | + |
529 | 548 | # ===----------------------------------------------------------------------=== # |
530 | 549 | # SUBMIT |
531 | 550 | # ===----------------------------------------------------------------------=== # |
@@ -1500,13 +1519,14 @@ def main() -> None: # noqa: PLR0912 |
1500 | 1519 | common_args = deduce_base(common_args) |
1501 | 1520 |
|
1502 | 1521 | if args.command in ["submit", "export"]: |
1503 | | - command_submit( |
1504 | | - common_args, |
1505 | | - draft=args.draft, |
1506 | | - reviewer=args.reviewer, |
1507 | | - keep_body=args.keep_body, |
1508 | | - draft_bitmask=args.draft_bitmask, |
1509 | | - ) |
| 1522 | + with maybe_stash_interactive_rebase(): |
| 1523 | + command_submit( |
| 1524 | + common_args, |
| 1525 | + draft=args.draft, |
| 1526 | + reviewer=args.reviewer, |
| 1527 | + keep_body=args.keep_body, |
| 1528 | + draft_bitmask=args.draft_bitmask, |
| 1529 | + ) |
1510 | 1530 | elif args.command == "land": |
1511 | 1531 | command_land(common_args) |
1512 | 1532 | elif args.command == "abandon": |
|
0 commit comments