summaryrefslogtreecommitdiffstats
path: root/project.py
diff options
context:
space:
mode:
authorMike Frysinger <vapier@google.com>2019-09-23 17:42:23 -0400
committerMike Frysinger <vapier@google.com>2019-11-13 20:29:33 +0000
commit2ba5a1e96347e735b12998c057a6c1eed79712e9 (patch)
tree54e676eeb3cbadd97c1a87659794c896df33890c /project.py
parent3538dd224d6d48c60b140103f25d94f0e5f76160 (diff)
downloadgit-repo-2ba5a1e96347e735b12998c057a6c1eed79712e9.tar.gz
sync: try to fast forward merge branches before checking published state
If the local branch changed state since its last upload, the data cached in .git/config related to the last uploaded CL might not be that relevant. If we're able to fast forward merge to the latest tree state, then let's do that. This would be akin to checking out a detached head before syncing where we already switch state. If we aren't able to fast forward merge, then it's not a big deal as we'll continue on to the existing branch checking logic. This would be easy to reproduce by doing something like: $ repo start foo . $ git revert HEAD $ repo upload --cbr . $ git reset --hard HEAD^ <CL is merged> $ repo sync . <we can fast forward> Change-Id: I7d62f3d1ba5314a349d85b4dbb0ec8352eca18bb Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/238552 Tested-by: Mike Frysinger <vapier@google.com> Reviewed-by: Michael Mortensen <mmortensen@google.com> Reviewed-by: Mike Frysinger <vapier@google.com>
Diffstat (limited to 'project.py')
-rwxr-xr-xproject.py11
1 files changed, 10 insertions, 1 deletions
diff --git a/project.py b/project.py
index 3d22998e..5ffa5424 100755
--- a/project.py
+++ b/project.py
@@ -1586,7 +1586,16 @@ class Project(object):
1586 return 1586 return
1587 1587
1588 upstream_gain = self._revlist(not_rev(HEAD), revid) 1588 upstream_gain = self._revlist(not_rev(HEAD), revid)
1589 pub = self.WasPublished(branch.name, all_refs) 1589
1590 # See if we can perform a fast forward merge. This can happen if our
1591 # branch isn't in the exact same state as we last published.
1592 try:
1593 self.work_git.merge_base('--is-ancestor', HEAD, revid)
1594 # Skip the published logic.
1595 pub = False
1596 except GitError:
1597 pub = self.WasPublished(branch.name, all_refs)
1598
1590 if pub: 1599 if pub:
1591 not_merged = self._revlist(not_rev(revid), pub) 1600 not_merged = self._revlist(not_rev(revid), pub)
1592 if not_merged: 1601 if not_merged: