OLD | NEW |
---|---|
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 logging | 10 import logging |
(...skipping 30 matching lines...) Expand all Loading... | |
41 import presubmit_support | 41 import presubmit_support |
42 import rietveld | 42 import rietveld |
43 import scm | 43 import scm |
44 import subprocess2 | 44 import subprocess2 |
45 import watchlists | 45 import watchlists |
46 | 46 |
47 | 47 |
48 DEFAULT_SERVER = 'https://codereview.appspot.com' | 48 DEFAULT_SERVER = 'https://codereview.appspot.com' |
49 POSTUPSTREAM_HOOK_PATTERN = '.git/hooks/post-cl-%s' | 49 POSTUPSTREAM_HOOK_PATTERN = '.git/hooks/post-cl-%s' |
50 DESCRIPTION_BACKUP_FILE = '~/.git_cl_description_backup' | 50 DESCRIPTION_BACKUP_FILE = '~/.git_cl_description_backup' |
51 GIT_INSTRUCTIONS_URL = 'http://code.google.com/p/chromium/wiki/UsingNewGit' | |
51 | 52 |
52 | 53 |
53 # Initialized in main() | 54 # Initialized in main() |
54 settings = None | 55 settings = None |
55 | 56 |
56 | 57 |
57 def DieWithError(message): | 58 def DieWithError(message): |
58 print >> sys.stderr, message | 59 print >> sys.stderr, message |
59 sys.exit(1) | 60 sys.exit(1) |
60 | 61 |
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
301 self.upstream_branch = None | 302 self.upstream_branch = None |
302 self.has_issue = False | 303 self.has_issue = False |
303 self.issue = None | 304 self.issue = None |
304 self.has_description = False | 305 self.has_description = False |
305 self.description = None | 306 self.description = None |
306 self.has_patchset = False | 307 self.has_patchset = False |
307 self.patchset = None | 308 self.patchset = None |
308 self._rpc_server = None | 309 self._rpc_server = None |
309 self.cc = None | 310 self.cc = None |
310 self.watchers = () | 311 self.watchers = () |
312 self._remote = None | |
311 | 313 |
312 def GetCCList(self): | 314 def GetCCList(self): |
313 """Return the users cc'd on this CL. | 315 """Return the users cc'd on this CL. |
314 | 316 |
315 Return is a string suitable for passing to gcl with the --cc flag. | 317 Return is a string suitable for passing to gcl with the --cc flag. |
316 """ | 318 """ |
317 if self.cc is None: | 319 if self.cc is None: |
318 base_cc = settings .GetDefaultCCList() | 320 base_cc = settings .GetDefaultCCList() |
319 more_cc = ','.join(self.watchers) | 321 more_cc = ','.join(self.watchers) |
320 self.cc = ','.join(filter(None, (base_cc, more_cc))) or '' | 322 self.cc = ','.join(filter(None, (base_cc, more_cc))) or '' |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
379 return remote, upstream_branch | 381 return remote, upstream_branch |
380 | 382 |
381 def GetUpstreamBranch(self): | 383 def GetUpstreamBranch(self): |
382 if self.upstream_branch is None: | 384 if self.upstream_branch is None: |
383 remote, upstream_branch = self.FetchUpstreamTuple() | 385 remote, upstream_branch = self.FetchUpstreamTuple() |
384 if remote is not '.': | 386 if remote is not '.': |
385 upstream_branch = upstream_branch.replace('heads', 'remotes/' + remote) | 387 upstream_branch = upstream_branch.replace('heads', 'remotes/' + remote) |
386 self.upstream_branch = upstream_branch | 388 self.upstream_branch = upstream_branch |
387 return self.upstream_branch | 389 return self.upstream_branch |
388 | 390 |
391 def GetRemote(self): | |
392 if not self._remote: | |
393 self._remote = self.FetchUpstreamTuple()[0] | |
394 if self._remote == '.': | |
395 def warn_default(): | |
396 logging.warning('Could not determine which remote this change is ' | |
397 'associated with, so defaulting to "%s". This may ' | |
398 'not be what you want. You may prevent this message ' | |
399 'by running "git svn info" as documented here: %s', | |
400 self._remote, | |
401 GIT_INSTRUCTIONS_URL) | |
402 | |
403 remotes = RunGit(['remote'], error_ok=True).split() | |
404 if len(remotes) == 1: | |
405 self._remote, = remotes | |
406 warn_default() | |
M-A Ruel
2012/03/22 19:39:00
Actually, I'd prefer to not warn here. It's fine a
jmbaker1
2012/03/22 19:56:58
Done.
| |
407 elif 'origin' in remotes: | |
408 self._remote = 'origin' | |
409 warn_default() | |
410 else: | |
411 logging.warn('Could not determine which remote this change is ' | |
412 'associated with. You may prevent this message by ' | |
413 'running "git svn info" as documented here: %s', | |
414 GIT_INSTRUCTIONS_URL) | |
415 return self._remote | |
416 | |
417 | |
389 def GetRemoteUrl(self): | 418 def GetRemoteUrl(self): |
390 """Return the configured remote URL, e.g. 'git://example.org/foo.git/'. | 419 """Return the configured remote URL, e.g. 'git://example.org/foo.git/'. |
391 | 420 |
392 Returns None if there is no remote. | 421 Returns None if there is no remote. |
393 """ | 422 """ |
394 remote = self.FetchUpstreamTuple()[0] | 423 remote = self.GetRemote() |
395 if remote == '.': | |
396 return None | |
397 return RunGit(['config', 'remote.%s.url' % remote], error_ok=True).strip() | 424 return RunGit(['config', 'remote.%s.url' % remote], error_ok=True).strip() |
398 | 425 |
399 def GetIssue(self): | 426 def GetIssue(self): |
400 if not self.has_issue: | 427 if not self.has_issue: |
401 issue = RunGit(['config', self._IssueSetting()], error_ok=True).strip() | 428 issue = RunGit(['config', self._IssueSetting()], error_ok=True).strip() |
402 if issue: | 429 if issue: |
403 self.issue = issue | 430 self.issue = issue |
404 else: | 431 else: |
405 self.issue = None | 432 self.issue = None |
406 self.has_issue = True | 433 self.has_issue = True |
(...skipping 1088 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1495 'and retry or visit go/isgaeup.\n%s') % (e.code, str(e))) | 1522 'and retry or visit go/isgaeup.\n%s') % (e.code, str(e))) |
1496 | 1523 |
1497 # Not a known command. Default to help. | 1524 # Not a known command. Default to help. |
1498 GenUsage(parser, 'help') | 1525 GenUsage(parser, 'help') |
1499 return CMDhelp(parser, argv) | 1526 return CMDhelp(parser, argv) |
1500 | 1527 |
1501 | 1528 |
1502 if __name__ == '__main__': | 1529 if __name__ == '__main__': |
1503 fix_encoding.fix_encoding() | 1530 fix_encoding.fix_encoding() |
1504 sys.exit(main(sys.argv[1:])) | 1531 sys.exit(main(sys.argv[1:])) |
OLD | NEW |