Index: gclient_scm.py |
diff --git a/gclient_scm.py b/gclient_scm.py |
index f7f0b885c4d71227c7fe4b47bcdf3ca62cd5daff..66a7c48db95a134def4db5164d778b0315d10993 100644 |
--- a/gclient_scm.py |
+++ b/gclient_scm.py |
@@ -473,7 +473,8 @@ class GitWrapper(SCMWrapper): |
if scm.GIT.IsGitSvn(self.checkout_path) and upstream_branch is not None: |
# Our git-svn branch (upstream_branch) is our upstream |
self._AttemptRebase(upstream_branch, files, options, |
- newbase=revision, printed_path=printed_path) |
+ newbase=revision, printed_path=printed_path, |
+ merge=options.merge) |
printed_path = True |
else: |
# Can't find a merge-base since we don't know our upstream. That makes |
@@ -483,12 +484,13 @@ class GitWrapper(SCMWrapper): |
if options.revision or deps_revision: |
upstream_branch = revision |
self._AttemptRebase(upstream_branch, files, options, |
- printed_path=printed_path) |
+ printed_path=printed_path, merge=options.merge) |
printed_path = True |
elif rev_type == 'hash': |
# case 2 |
self._AttemptRebase(upstream_branch, files, options, |
- newbase=revision, printed_path=printed_path) |
+ newbase=revision, printed_path=printed_path, |
+ merge=options.merge) |
printed_path = True |
elif revision.replace('heads', 'remotes/' + self.remote) != upstream_branch: |
# case 4 |
@@ -509,25 +511,30 @@ class GitWrapper(SCMWrapper): |
print('Trying fast-forward merge to branch : %s' % upstream_branch) |
try: |
merge_args = ['merge'] |
- if not options.merge: |
+ if options.merge: |
+ merge_args.append('--ff') |
+ else: |
merge_args.append('--ff-only') |
merge_args.append(upstream_branch) |
merge_output = scm.GIT.Capture(merge_args, cwd=self.checkout_path) |
except subprocess2.CalledProcessError as e: |
if re.match('fatal: Not possible to fast-forward, aborting.', e.stderr): |
+ files = [] |
if not printed_path: |
print('\n_____ %s%s' % (self.relpath, rev_str)) |
printed_path = True |
while True: |
try: |
action = ask_for_data( |
- 'Cannot fast-forward merge, attempt to rebase? ' |
- '(y)es / (q)uit / (s)kip : ', options) |
+ 'Cannot %s, attempt to rebase? ' |
+ '(y)es / (q)uit / (s)kip : ' % |
+ ('merge' if options.merge else 'fast-forward merge'), |
+ options) |
except ValueError: |
raise gclient_utils.Error('Invalid Character') |
if re.match(r'yes|y', action, re.I): |
self._AttemptRebase(upstream_branch, files, options, |
- printed_path=printed_path) |
+ printed_path=printed_path, merge=False) |
printed_path = True |
break |
elif re.match(r'quit|q', action, re.I): |
@@ -884,19 +891,26 @@ class GitWrapper(SCMWrapper): |
'create a new branch for your work.') % (revision, self.remote)) |
def _AttemptRebase(self, upstream, files, options, newbase=None, |
- branch=None, printed_path=False): |
+ branch=None, printed_path=False, merge=False): |
"""Attempt to rebase onto either upstream or, if specified, newbase.""" |
if files is not None: |
files.extend(self._Capture(['diff', upstream, '--name-only']).split()) |
revision = upstream |
if newbase: |
revision = newbase |
+ action = 'merge' if merge else 'rebase' |
if not printed_path: |
- print('\n_____ %s : Attempting rebase onto %s...' % ( |
- self.relpath, revision)) |
+ print('\n_____ %s : Attempting %s onto %s...' % ( |
+ self.relpath, action, revision)) |
printed_path = True |
else: |
- print('Attempting rebase onto %s...' % revision) |
+ print('Attempting %s onto %s...' % (action, revision)) |
+ |
+ if merge: |
+ merge_output = self._Capture(['merge', revision]) |
+ if options.verbose: |
+ print(merge_output) |
+ return |
# Build the rebase command here using the args |
# git rebase [options] [--onto <newbase>] <upstream> [<branch>] |