Index: git-try.py |
diff --git a/git-try.py b/git-try.py |
deleted file mode 100755 |
index b289a20564c7ee0ce52718614f970ac7bbbd6df4..0000000000000000000000000000000000000000 |
--- a/git-try.py |
+++ /dev/null |
@@ -1,187 +0,0 @@ |
-#!/usr/bin/python |
- |
-# Repo lives in ~evanm/projects/git-try -- feel free to send patches. |
- |
-import getpass |
-import optparse |
-import os |
-import subprocess |
-import tempfile |
-import traceback |
-import urllib |
-import sys |
- |
- |
-def Backquote(cmd): |
- """Like running `cmd` in a shell script.""" |
- return subprocess.Popen(cmd, stdout=subprocess.PIPE).communicate()[0].strip() |
- |
- |
-def GetTryServerConfig(): |
- """Returns the dictionary of try server options or None if they |
- cannot be found.""" |
- script_path = 'tools/tryserver/tryserver.py' |
- root_dir = Backquote(['git', 'rev-parse', '--show-cdup']) |
- try: |
- script_file = open(os.path.join(root_dir, script_path)) |
- except IOError: |
- return None |
- locals = {} |
- try: |
- exec(script_file, locals) |
- except Exception, e: |
- return None |
- return locals |
- |
- |
-def GetBranchName(): |
- """Return name of current git branch.""" |
- branch = Backquote(['git', 'symbolic-ref', 'HEAD']) |
- if not branch.startswith('refs/heads/'): |
- raise "Couldn't figure out branch name" |
- branch = branch[len('refs/heads/'):] |
- return branch |
- |
- |
-def GetPatchName(): |
- """Construct a name for this patch.""" |
- short_sha = Backquote(['git', 'rev-parse', '--short=4', 'HEAD']) |
- return GetBranchName() + '-' + short_sha |
- |
- |
-def GetRevision(): |
- """Get the latest Subversion revision number.""" |
- for line in Backquote(['git', 'svn', 'info']).split('\n'): |
- if line.startswith('Revision:'): |
- return line[len('Revision:'):].strip() |
- raise "Couldn't figure out latest revision" |
- |
- |
-def GetRietveldIssueNumber(): |
- return Backquote(['git', 'config', |
- 'branch.%s.rietveldissue' % GetBranchName()]) |
- |
- |
-def GetRietveldPatchsetNumber(): |
- return Backquote(['git', 'config', |
- 'branch.%s.rietveldpatchset' % GetBranchName()]) |
- |
- |
-def GetMungedDiff(branch): |
- """Get the diff we'll send to the try server. We munge paths to match svn.""" |
- # Make the following changes: |
- # - Prepend "src/" to paths as svn is expecting |
- # - In the case of added files, replace /dev/null with the path to the file |
- # being added. |
- output = [] |
- if not branch: |
- # Try to guess the upstream branch. |
- branch = Backquote(['git', 'cl', 'upstream']) |
- diff = subprocess.Popen(['git', 'diff-tree', '-p', '--no-prefix', |
- branch, 'HEAD'], |
- stdout=subprocess.PIPE).stdout.readlines() |
- for i in range(len(diff)): |
- line = diff[i] |
- if line.startswith('--- /dev/null'): |
- line = '--- %s' % diff[i+1][4:] |
- elif line.startswith('--- ') or line.startswith('+++ '): |
- line = line[0:4] + 'src/' + line[4:] |
- output.append(line) |
- |
- return ''.join(output) |
- |
- |
-def GetEmail(): |
- # TODO: check for errors here? |
- return Backquote(['git', 'config', 'user.email']) |
- |
- |
-def TryChange(args): |
- """Put a patch on the try server using SVN.""" |
- # TODO: figure out a better way to load trychange |
- script_path = '../depot_tools/release' |
- root_dir = Backquote(['git', 'rev-parse', '--show-cdup']) |
- sys.path.append(os.path.join(root_dir, script_path)) |
- import trychange |
- trychange.checkout_root = os.path.abspath(root_dir) |
- trychange.TryChange(args, None, False) |
- |
- |
-def WriteTryDiffHTTP(config, patch_name, diff, options): |
- """Put a patch on the try server.""" |
- params = { |
- 'user': getpass.getuser(), |
- 'name': patch_name, |
- 'patch': diff |
- } |
- |
- if options.bot: |
- params['bot'] = options.bot |
- |
- if options.clobber: |
- params['clobber'] = 'true' |
- |
- url = 'http://%s:%s/send_try_patch' % (config['try_server_http_host'], |
- config['try_server_http_port']) |
- connection = urllib.urlopen(url, urllib.urlencode(params)) |
- response = connection.read() |
- if (response != 'OK'): |
- print "Error posting to", url |
- print response |
- assert False |
- |
- |
-if __name__ == '__main__': |
- parser = optparse.OptionParser( |
- usage='git try [branch]', |
- description='Upload the current diff of branch...HEAD to the try server.') |
- parser.add_option("-b", "--bot", |
- help="Force the use of a specific build slave (eg mac, " |
- "win, or linux)") |
- parser.add_option("-c", "--clobber", action="store_true", |
- help="Make the try run use be a clobber build") |
- (options, args) = parser.parse_args(sys.argv) |
- |
- branch = None |
- if len(args) > 1: |
- branch = args[1] |
- |
- patch_name = GetPatchName() |
- diff = GetMungedDiff(branch) |
- |
- # Send directly to try server if we can parse the config, otherwise |
- # upload via SVN. |
- config = GetTryServerConfig() |
- if config is not None: |
- print "Sending %s using HTTP..." % patch_name |
- WriteTryDiffHTTP(config=config, patch_name=patch_name, diff=diff, |
- options=options) |
- else: |
- print "Sending %s using SVN..." % patch_name |
- |
- # Write the diff out to a temporary file |
- diff_file = tempfile.NamedTemporaryFile() |
- diff_file.write(diff) |
- diff_file.flush() |
- |
- email = GetEmail() |
- user = email.partition('@')[0] |
- args = [ |
- '--use_svn', |
- '--svn_repo', 'svn://svn.chromium.org/chrome-try/try', |
- '-u', user, |
- '-e', email, |
- '-n', patch_name, |
- '-r', GetRevision(), |
- '--diff', diff_file.name, |
- ] |
- if options.bot: |
- args.extend(['--bot', options.bot]) |
- if options.clobber: |
- args.append('--clobber') |
- if GetRietveldPatchsetNumber(): |
- args.extend([ |
- '--issue', GetRietveldIssueNumber(), |
- '--patchset', GetRietveldPatchsetNumber(), |
- ]) |
- TryChange(args=args) |