From f237063dce57c7cfe1cb554b3b903907750c4d63 Mon Sep 17 00:00:00 2001 From: "msb@chromium.org" Date: Wed, 25 Nov 2009 00:22:11 +0000 Subject: [PATCH] gclient: handle case for upstream has rebased gclient sync will potentially fail if the upstream git tree has been rebased. This CL fixes this by using rebase --onto to only rebase our local changes. Review URL: http://codereview.chromium.org/432017 git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@33011 0039d316-1c4b-4281-b951-d872f2087c98 --- gclient_scm.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/gclient_scm.py b/gclient_scm.py index 2b3f7aa70..d36a95bb4 100644 --- a/gclient_scm.py +++ b/gclient_scm.py @@ -135,13 +135,16 @@ class GitWrapper(SCMWrapper, scm.GIT): file_list.extend([os.path.join(self.checkout_path, f) for f in files]) return - self._Run(['remote', 'update'], redirect_stdout=False) new_base = 'origin' if revision: new_base = revision + cur_branch = self._Run(['symbolic-ref', 'HEAD']).split('/')[-1] + merge_base = self._Run(['merge-base', 'HEAD', new_base]) + self._Run(['remote', 'update'], redirect_stdout=False) files = self._Run(['diff', new_base, '--name-only']).split() file_list.extend([os.path.join(self.checkout_path, f) for f in files]) - self._Run(['rebase', '-v', new_base], redirect_stdout=False) + self._Run(['rebase', '-v', '--onto', new_base, merge_base, cur_branch], + redirect_stdout=False) print "Checked out revision %s." % self.revinfo(options, (), None) def revert(self, options, args, file_list):