summaryrefslogtreecommitdiff
path: root/subcmds/rebase.py
diff options
context:
space:
mode:
authorGavin Mak <gavinmak@google.com>2026-07-07 18:53:21 +0000
committergerrit-scoped@luci-project-accounts.iam.gserviceaccount.com <gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com>2026-07-07 13:40:52 -0700
commit3bb4871c4407c9029be9741ec40f261f1ead377d (patch)
treebb7b0ce7d12620a22c66ed74a68bea1e667a5180 /subcmds/rebase.py
parent35bbf701d04de5c6a71937279bc3d16f6ce36808 (diff)
downloadgit-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.py15
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)