Index: git_cl.py |
diff --git a/git_cl.py b/git_cl.py |
index 289640a77cc0b1962faf9dc8c50abaabe8bd4f35..1062a7a0fa440ab01ab2ba157c5601d2beecdc57 100755 |
--- a/git_cl.py |
+++ b/git_cl.py |
@@ -1861,7 +1861,18 @@ def CMDpatch(parser, args): |
# TODO(maruel): Use apply_issue.py |
# TODO(ukai): use gerrit-cherry-pick for gerrit repository? |
- if issue_arg.isdigit(): |
+ if options.newbranch: |
+ if options.force: |
+ RunGit(['branch', '-D', options.newbranch], |
+ stderr=subprocess2.PIPE, error_ok=True) |
+ RunGit(['checkout', '-b', options.newbranch, |
+ Changelist().GetUpstreamBranch()]) |
+ |
+ return PatchIssue(issue_arg, options.reject, options.nocommit) |
+ |
+ |
+def PatchIssue(issue_arg, reject, nocommit): |
+ if type(issue_arg) is int or issue_arg.isdigit(): |
# Input is an issue id. Figure out the URL. |
issue = int(issue_arg) |
cl = Changelist(issue=issue) |
@@ -1878,13 +1889,6 @@ def CMDpatch(parser, args): |
patchset = int(match.group(2)) |
patch_data = urllib2.urlopen(issue_arg).read() |
- if options.newbranch: |
- if options.force: |
- RunGit(['branch', '-D', options.newbranch], |
- stderr=subprocess2.PIPE, error_ok=True) |
- RunGit(['checkout', '-b', options.newbranch, |
- Changelist().GetUpstreamBranch()]) |
- |
# Switch up to the top-level directory, if necessary, in preparation for |
# applying the patch. |
top = RunGit(['rev-parse', '--show-cdup']).strip() |
@@ -1909,7 +1913,7 @@ def CMDpatch(parser, args): |
# pick up file adds. |
# The --index flag means: also insert into the index (so we catch adds). |
cmd = ['git', 'apply', '--index', '-p0'] |
- if options.reject: |
+ if reject: |
cmd.append('--reject') |
elif IsGitVersionAtLeast('1.7.12'): |
cmd.append('--3way') |
@@ -1920,7 +1924,7 @@ def CMDpatch(parser, args): |
DieWithError('Failed to apply the patch') |
# If we had an issue, commit the current state and register the issue. |
- if not options.nocommit: |
+ if not nocommit: |
RunGit(['commit', '-m', 'patch from issue %s' % issue]) |
cl = Changelist() |
cl.SetIssue(issue) |
@@ -2128,6 +2132,31 @@ def CMDset_close(parser, args): |
return 0 |
+def CMDdiff(parser, args): |
+ """shows differences between local tree and last upload.""" |
+ cl = Changelist() |
+ branch = cl.GetBranch() |
+ TMP_BRANCH = 'git-cl-diff' |
+ base_branch = RunGit(['merge-base', cl.GetUpstreamBranch(), 'HEAD']).strip() |
+ |
+ # Create a new branch based on the merge-base |
+ RunGit(['checkout', '-q', '-b', TMP_BRANCH, base_branch]) |
+ try: |
+ # Patch in the latest changes from rietveld. |
+ rtn = PatchIssue(cl.GetIssue(), False, False) |
+ if rtn != 0: |
+ return rtn |
+ |
+ # Switch back to starting brand and diff against the temporary |
+ # branch containing the latest rietveld patch. |
+ subprocess2.check_call(['git', 'diff', TMP_BRANCH, branch]) |
+ finally: |
+ RunGit(['checkout', '-q', branch]) |
+ RunGit(['branch', '-D', TMP_BRANCH]) |
+ |
+ return 0 |
+ |
+ |
def CMDowners(parser, args): |
"""interactively find the owners for reviewing""" |
parser.add_option( |