diff options
| author | Gavin Mak <gavinmak@google.com> | 2026-07-07 18:53:21 +0000 |
|---|---|---|
| committer | gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com <gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2026-07-07 13:40:52 -0700 |
| commit | 3bb4871c4407c9029be9741ec40f261f1ead377d (patch) | |
| tree | bb7b0ce7d12620a22c66ed74a68bea1e667a5180 /subcmds/rebase.py | |
| parent | 35bbf701d04de5c6a71937279bc3d16f6ce36808 (diff) | |
| download | git-repo-3bb4871c4407c9029be9741ec40f261f1ead377d.tar.gz git-repo-3bb4871c4407c9029be9741ec40f261f1ead377d.zip | |
rebase: Resolve revisionExpr to tracking branch for --onto-manifest
When running `repo rebase -m` (`--onto-manifest`), the command uses the
raw `revisionExpr` from the manifest (e.g. `main`) directly as the
`--onto` target. This can fail or behave incorrectly if it should
reference the local tracking branch (e.g. `refs/remotes/<remote>/main`).
Resolve `project.revisionExpr` to its local tracking branch using
`project.GetRemote().ToLocal()`. Fall back to using the raw
`revisionExpr` value if the resolution fails (raising a `GitError`).
Bug: 532028666
Change-Id: I4c1bca1374a5842688be227f6aa2afffcdad5397
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/604941
Reviewed-by: Brian Gan <brgan@google.com>
Tested-by: Gavin Mak <gavinmak@google.com>
Commit-Queue: Gavin Mak <gavinmak@google.com>
Diffstat (limited to 'subcmds/rebase.py')
| -rw-r--r-- | subcmds/rebase.py | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/subcmds/rebase.py b/subcmds/rebase.py index d7e769cef..af8be4ea2 100644 --- a/subcmds/rebase.py +++ b/subcmds/rebase.py @@ -16,7 +16,9 @@ import sys from color import Coloring from command import Command +from error import GitError from git_command import GitCommand +from project import Project from repo_logging import RepoLogger @@ -30,6 +32,17 @@ class RebaseColoring(Coloring): self.fail = self.printer("fail", fg="red") +def _ResolveOntoManifest(project: Project) -> str: + """Resolve project's revisionExpr to a local tracking branch. + + Falls back to the raw revisionExpr if ToLocal fails or raises GitError. + """ + try: + return project.GetRemote().ToLocal(project.revisionExpr) + except GitError: + return project.revisionExpr + + class Rebase(Command): COMMON = True helpSummary = "Rebase local branches on upstream branch" @@ -162,7 +175,7 @@ branch but need to incorporate new upstream changes "underneath" them. args = common_args[:] if opt.onto_manifest: args.append("--onto") - args.append(project.revisionExpr) + args.append(_ResolveOntoManifest(project)) args.append(upbranch.LocalMerge) |
