Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(521)

Unified Diff: git_cl.py

Issue 8826015: Add minimal Gerrit support to 'git cl config' and 'git cl upload' (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools/
Patch Set: Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: git_cl.py
===================================================================
--- git_cl.py (revision 113303)
+++ git_cl.py (working copy)
@@ -47,7 +47,13 @@
POSTUPSTREAM_HOOK_PATTERN = '.git/hooks/post-cl-%s'
DESCRIPTION_BACKUP_FILE = '~/.git_cl_description_backup'
+GERRIT_FETCH_URL = 'http://git.chromium.org'
M-A Ruel 2011/12/07 19:21:28 No, don't hard code them. If you look again, there
+# Note these are assuming users have set up ~/.ssh/config stanzas
+# as recommended so that no port numbers are required.
+GERRIT_PUSH_URL = 'ssh://gerrit.chromium.org'
+GERRIT_COMMIT_HOOK = 'gerrit.chromium.org:hooks/commit-msg'
+
# Initialized in main()
settings = None
@@ -731,11 +737,28 @@
keyvals['ORIGIN_URL_CONFIG']])
+def GerritConfig(options, args):
+ """Set up git config for use with Gerrit."""
+
+ # Install the standard commit-msg hook.
+ RunCommand(['scp', '-p', GERRIT_COMMIT_HOOK,
+ os.path.join('.git', 'hooks', 'commit-msg')])
+
+ # Set the standard URL mapping.
+ RunGit(['config',
+ 'url.' + GERRIT_PUSH_URL + '.pushinsteadof', GERRIT_FETCH_URL])
+
+
@usage('[repo root containing codereview.settings]')
def CMDconfig(parser, args):
"""edit configuration for this tree"""
+ parser.add_option('-g', '--gerrit', action='store_true',
M-A Ruel 2011/12/07 19:21:28 It should be automatic, no need for flags.
+ help='Configure for Gerrit rather than Rietveld')
+ options, args = parser.parse_args(args)
- _, args = parser.parse_args(args)
+ if options.gerrit:
+ return GerritConfig(options, args)
+
if len(args) == 0:
GetCodereviewSettingsInteractively()
return 0
@@ -863,6 +886,34 @@
return 0
+def GerritUpload(options, args):
+ # We assume the remote called "origin" is the one we want.
+ # It's probably not worthwhile to support different workflows.
M-A Ruel 2011/12/07 19:21:28 It is.
+ remote = 'origin'
+
+ branch = 'master'
+ if options.for_branch is not None:
+ branch = options.for_branch
+
+ receive_options = []
+
+ if options.cc is not None:
+ receive_options += ['--cc=' + email for email in
+ options.cc.split(',')]
+ if options.reviewers is not None:
+ receive_options += ['--reviewer=' + email for email in
+ options.reviewers.split(',')]
+
+ git_command = ['push']
+ if receive_options:
+ git_command.append('--receive-pack=git receive-pack ' +
+ ' '.join(receive_options))
+ git_command += [remote, 'HEAD:refs/for/' + branch]
+
+ RunGit(git_command)
+ return 0
+
+
@usage('[args to "git diff"]')
def CMDupload(parser, args):
"""upload the current changelist to codereview"""
@@ -886,14 +937,30 @@
uses message as subject""")
parser.add_option('-c', '--use-commit-queue', action='store_true',
help='tell the commit queue to commit this patchset')
+ parser.add_option('-g', '--gerrit', action='store_true',
+ help='Send change to Gerrit rather than Rietveld')
+ parser.add_option('-b', '--for-branch',
+ help='Gerrit branch to send change to')
(options, args) = parser.parse_args(args)
+ # TODO(mcgrathr): Perhaps look at some git-config variable stored
+ # by GerritConfig to default to gerrit mode?
+ if options.gerrit and (options.bypass_hooks or
+ options.message or
+ options.from_logs or
+ options.use_commit_queue):
+ print 'The --gerrit (-g) option is incompatible with most other options.'
+ return 1
+
# Make sure index is up-to-date before running diff-index.
RunGit(['update-index', '--refresh', '-q'], error_ok=True)
if RunGit(['diff-index', 'HEAD']):
print 'Cannot upload with a dirty tree. You must commit locally first.'
return 1
+ if options.gerrit:
+ return GerritUpload(options, args)
+
cl = Changelist()
if args:
base_branch = args[0]
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698