Chromium Code Reviews

Side by Side Diff: git_cl.py

Issue 11262057: git_cl sanity checks (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Moving refactors to separate CL Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 # Copyright (C) 2008 Evan Martin <martine@danga.com> 6 # Copyright (C) 2008 Evan Martin <martine@danga.com>
7 7
8 """A git-command for integrating reviews on Rietveld.""" 8 """A git-command for integrating reviews on Rietveld."""
9 9
10 import json 10 import json
(...skipping 145 matching lines...)
156 dirty = RunGit(['diff-index', '--name-status', 'HEAD']) 156 dirty = RunGit(['diff-index', '--name-status', 'HEAD'])
157 if dirty: 157 if dirty:
158 print 'Cannot %s with a dirty tree. You must commit locally first.' % cmd 158 print 'Cannot %s with a dirty tree. You must commit locally first.' % cmd
159 print 'Uncommitted files: (git diff-index --name-status HEAD)' 159 print 'Uncommitted files: (git diff-index --name-status HEAD)'
160 print dirty[:4096] 160 print dirty[:4096]
161 if len(dirty) > 4096: 161 if len(dirty) > 4096:
162 print '... (run "git diff-index --name-status HEAD" to see full output).' 162 print '... (run "git diff-index --name-status HEAD" to see full output).'
163 return True 163 return True
164 return False 164 return False
165 165
166
167 def git_cl_sanity_checks(upstream_git_obj):
168 # First verify that the commit we're diffing against is in our tree.
169 upstream_sha = RunGit(['rev-parse', '--verify', upstream_git_obj]).strip()
170 common_ancestor = RunGit(['merge-base', upstream_sha, 'HEAD']).strip()
171 if upstream_sha != common_ancestor:
M-A Ruel 2012/10/27 01:29:41 I disagree with this check. It happens I git fetch
Isaac (away) 2012/10/27 01:32:55 This is intended to catch diffing against a rebase
M-A Ruel 2012/10/27 01:37:23 git checkout -b work origin/master vim foo git com
172 print >> sys.stderr, (
173 'ERROR: %s is not in the current branch. You may need to rebase your '
174 'tracking branch' % upstream_sha)
175 return False
176
177 commits_in_diff = RunGit(
178 ['rev-list', '^%s' % upstream_sha, 'HEAD']).splitlines()
179 commits_in_origin = RunGit(
180 ['rev-list', '^%s' % upstream_sha, 'remotes/origin/master']).splitlines()
181
182 common_commits = set(commits_in_diff) & set(commits_in_origin)
183 if common_commits:
184 print >> sys.stderr, (
185 'ERROR: Your diff contains %d commits already in origin/master.\n'
186 'Run "git log --oneline origin/master..HEAD" to get a list of commits '
187 'in the diff' % len(common_commits))
188 return False
189 return True
190
191
166 def MatchSvnGlob(url, base_url, glob_spec, allow_wildcards): 192 def MatchSvnGlob(url, base_url, glob_spec, allow_wildcards):
167 """Return the corresponding git ref if |base_url| together with |glob_spec| 193 """Return the corresponding git ref if |base_url| together with |glob_spec|
168 matches the full |url|. 194 matches the full |url|.
169 195
170 If |allow_wildcards| is true, |glob_spec| can contain wildcards (see below). 196 If |allow_wildcards| is true, |glob_spec| can contain wildcards (see below).
171 """ 197 """
172 fetch_suburl, as_ref = glob_spec.split(':') 198 fetch_suburl, as_ref = glob_spec.split(':')
173 if allow_wildcards: 199 if allow_wildcards:
174 glob_match = re.match('(.+/)?(\*|{[^/]*})(/.+)?', fetch_suburl) 200 glob_match = re.match('(.+/)?(\*|{[^/]*})(/.+)?', fetch_suburl)
175 if glob_match: 201 if glob_match:
(...skipping 424 matching lines...)
600 if issue: 626 if issue:
601 RunGit(['config', self._IssueSetting(), str(issue)]) 627 RunGit(['config', self._IssueSetting(), str(issue)])
602 if self.rietveld_server: 628 if self.rietveld_server:
603 RunGit(['config', self._RietveldServer(), self.rietveld_server]) 629 RunGit(['config', self._RietveldServer(), self.rietveld_server])
604 else: 630 else:
605 RunGit(['config', '--unset', self._IssueSetting()]) 631 RunGit(['config', '--unset', self._IssueSetting()])
606 self.SetPatchset(0) 632 self.SetPatchset(0)
607 self.has_issue = False 633 self.has_issue = False
608 634
609 def GetChange(self, upstream_branch, author): 635 def GetChange(self, upstream_branch, author):
636 if not git_cl_sanity_checks(upstream_branch):
637 DieWithError('\nGit sanity check failure')
638
610 root = RunCommand(['git', 'rev-parse', '--show-cdup']).strip() or '.' 639 root = RunCommand(['git', 'rev-parse', '--show-cdup']).strip() or '.'
611 absroot = os.path.abspath(root) 640 absroot = os.path.abspath(root)
612 641
613 # We use the sha1 of HEAD as a name of this change. 642 # We use the sha1 of HEAD as a name of this change.
614 name = RunCommand(['git', 'rev-parse', 'HEAD']).strip() 643 name = RunCommand(['git', 'rev-parse', 'HEAD']).strip()
615 # Need to pass a relative path for msysgit. 644 # Need to pass a relative path for msysgit.
616 try: 645 try:
617 files = scm.GIT.CaptureStatus([root], '.', upstream_branch) 646 files = scm.GIT.CaptureStatus([root], '.', upstream_branch)
618 except subprocess2.CalledProcessError: 647 except subprocess2.CalledProcessError:
619 DieWithError( 648 DieWithError(
(...skipping 1189 matching lines...)
1809 'and retry or visit go/isgaeup.\n%s') % (e.code, str(e))) 1838 'and retry or visit go/isgaeup.\n%s') % (e.code, str(e)))
1810 1839
1811 # Not a known command. Default to help. 1840 # Not a known command. Default to help.
1812 GenUsage(parser, 'help') 1841 GenUsage(parser, 'help')
1813 return CMDhelp(parser, argv) 1842 return CMDhelp(parser, argv)
1814 1843
1815 1844
1816 if __name__ == '__main__': 1845 if __name__ == '__main__':
1817 fix_encoding.fix_encoding() 1846 fix_encoding.fix_encoding()
1818 sys.exit(main(sys.argv[1:])) 1847 sys.exit(main(sys.argv[1:]))
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine