Add a `--rebase` option to sync command Previously repo would abort a sync if there were published changes not merged upstream. The --rebase option allows the modification of published commits. This is a copy of http://go/grev/369694 with the merge conflicts resolved. Bug: 40014610 Change-Id: Idac8199400346327b530abea33f1ed794e5bb4c2 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/435838 Reviewed-by: Josip Sokcevic <sokcevic@google.com> Tested-by: Jeroen Dhollander <jeroendh@google.com> Commit-Queue: Jeroen Dhollander <jeroendh@google.com>
diff --git a/project.py b/project.py index 28b1941..25a8cdc 100644 --- a/project.py +++ b/project.py
@@ -1535,6 +1535,7 @@ syncbuf, force_sync=False, force_checkout=False, + force_rebase=False, submodules=False, errors=None, verbose=False, @@ -1680,14 +1681,15 @@ if pub: not_merged = self._revlist(not_rev(revid), pub) if not_merged: - if upstream_gain: + if upstream_gain and not force_rebase: # The user has published this branch and some of those # commits are not yet merged upstream. We do not want # to rewrite the published commits so we punt. fail( LocalSyncFail( "branch %s is published (but not merged) and is " - "now %d commits behind" + "now %d commits behind. Fix this manually or rerun " + "with the --rebase option to force a rebase." % (branch.name, len(upstream_gain)), project=self.name, )
diff --git a/subcmds/sync.py b/subcmds/sync.py index 113e7a6..019ce3e 100644 --- a/subcmds/sync.py +++ b/subcmds/sync.py
@@ -401,6 +401,13 @@ "WARNING: this may cause loss of data", ) p.add_option( + "--rebase", + dest="rebase", + action="store_true", + help="rebase local commits regardless of whether they are " + "published", + ) + p.add_option( "-l", "--local-only", dest="local_only", @@ -1009,7 +1016,13 @@ return _FetchMainResult(all_projects) def _CheckoutOne( - self, detach_head, force_sync, force_checkout, verbose, project + self, + detach_head, + force_sync, + force_checkout, + force_rebase, + verbose, + project, ): """Checkout work tree for one project @@ -1019,6 +1032,7 @@ existing git directory that was previously linked to a different object directory). force_checkout: Force checking out of the repo content. + force_rebase: Force rebase. verbose: Whether to show verbose messages. project: Project object for the project to checkout. @@ -1036,6 +1050,7 @@ syncbuf, force_sync=force_sync, force_checkout=force_checkout, + force_rebase=force_rebase, errors=errors, verbose=verbose, ) @@ -1109,6 +1124,7 @@ opt.detach_head, opt.force_sync, opt.force_checkout, + opt.rebase, opt.verbose, ), projects,