| 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 |
| 396 remotes = RunGit(['remote'], error_ok=True).split() |
| 397 if len(remotes) == 1: |
| 398 self._remote, = remotes |
| 399 elif 'origin' in remotes: |
| 400 self._remote = 'origin' |
| 401 logging.warning('Could not determine which remote this change is ' |
| 402 'associated with, so defaulting to "%s". This may ' |
| 403 'not be what you want. You may prevent this message ' |
| 404 'by running "git svn info" as documented here: %s', |
| 405 self._remote, |
| 406 GIT_INSTRUCTIONS_URL) |
| 407 else: |
| 408 logging.warn('Could not determine which remote this change is ' |
| 409 'associated with. You may prevent this message by ' |
| 410 'running "git svn info" as documented here: %s', |
| 411 GIT_INSTRUCTIONS_URL) |
| 412 return self._remote |
| 413 |
| 414 |
| 389 def GetRemoteUrl(self): | 415 def GetRemoteUrl(self): |
| 390 """Return the configured remote URL, e.g. 'git://example.org/foo.git/'. | 416 """Return the configured remote URL, e.g. 'git://example.org/foo.git/'. |
| 391 | 417 |
| 392 Returns None if there is no remote. | 418 Returns None if there is no remote. |
| 393 """ | 419 """ |
| 394 remote = self.FetchUpstreamTuple()[0] | 420 remote = self.GetRemote() |
| 395 if remote == '.': | |
| 396 return None | |
| 397 return RunGit(['config', 'remote.%s.url' % remote], error_ok=True).strip() | 421 return RunGit(['config', 'remote.%s.url' % remote], error_ok=True).strip() |
| 398 | 422 |
| 399 def GetIssue(self): | 423 def GetIssue(self): |
| 400 if not self.has_issue: | 424 if not self.has_issue: |
| 401 issue = RunGit(['config', self._IssueSetting()], error_ok=True).strip() | 425 issue = RunGit(['config', self._IssueSetting()], error_ok=True).strip() |
| 402 if issue: | 426 if issue: |
| 403 self.issue = issue | 427 self.issue = issue |
| 404 else: | 428 else: |
| 405 self.issue = None | 429 self.issue = None |
| 406 self.has_issue = True | 430 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))) | 1519 'and retry or visit go/isgaeup.\n%s') % (e.code, str(e))) |
| 1496 | 1520 |
| 1497 # Not a known command. Default to help. | 1521 # Not a known command. Default to help. |
| 1498 GenUsage(parser, 'help') | 1522 GenUsage(parser, 'help') |
| 1499 return CMDhelp(parser, argv) | 1523 return CMDhelp(parser, argv) |
| 1500 | 1524 |
| 1501 | 1525 |
| 1502 if __name__ == '__main__': | 1526 if __name__ == '__main__': |
| 1503 fix_encoding.fix_encoding() | 1527 fix_encoding.fix_encoding() |
| 1504 sys.exit(main(sys.argv[1:])) | 1528 sys.exit(main(sys.argv[1:])) |
| OLD | NEW |