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

Side by Side Diff: git-try

Issue 173394: git-try: Use trychange library for HTTP submits.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/tools/depot_tools/
Patch Set: Created 11 years, 3 months 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 unified diff | Download patch | 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/python 1 #!/usr/bin/python
2 2
3 import getpass 3 import getpass
4 import optparse 4 import optparse
5 import os 5 import os
6 import subprocess 6 import subprocess
7 import tempfile 7 import tempfile
8 import traceback 8 import traceback
9 import urllib 9 import urllib
10 import sys 10 import sys
11 import re
12 import trychange
11 13
12 14
13 def Backquote(cmd): 15 def Backquote(cmd):
14 """Like running `cmd` in a shell script.""" 16 """Like running `cmd` in a shell script."""
15 return subprocess.Popen(cmd, stdout=subprocess.PIPE).communicate()[0].strip() 17 return subprocess.Popen(cmd, stdout=subprocess.PIPE).communicate()[0].strip()
16 18
17 19
18 def GetTryServerConfig(): 20 def GetTryServerConfig():
19 """Returns the dictionary of try server options or None if they 21 """Returns the dictionary of try server options or None if they
20 cannot be found.""" 22 cannot be found."""
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 line = line[0:4] + 'src/' + line[4:] 88 line = line[0:4] + 'src/' + line[4:]
87 output.append(line) 89 output.append(line)
88 90
89 munged_diff = ''.join(output) 91 munged_diff = ''.join(output)
90 if len(munged_diff.strip()) == 0: 92 if len(munged_diff.strip()) == 0:
91 raise Exception("Patch was empty, did you give the right remote branch?") 93 raise Exception("Patch was empty, did you give the right remote branch?")
92 94
93 return munged_diff 95 return munged_diff
94 96
95 97
98 def ValidEmail(email):
99 return re.match(r"^[a-zA-Z0-9._%-+]+@[a-zA-Z0-9._%-]+.[a-zA-Z]{2,6}$", email)
100
101
96 def GetEmail(): 102 def GetEmail():
97 # TODO: check for errors here? 103 email = Backquote(['git', 'config', 'user.email'])
98 return Backquote(['git', 'config', 'user.email']) 104 runmsg = "Try: git config user.email <EMAIL>"
105 assert ValidEmail(email), "Email '%s' is not valid. %s" % (email, runmsg)
106 return email
99 107
100 108
101 def TryChange(args): 109 def TryChange(args):
102 """Put a patch on the try server using SVN.""" 110 """Put a patch on the try server."""
103 root_dir = Backquote(['git', 'rev-parse', '--show-cdup']) 111 root_dir = Backquote(['git', 'rev-parse', '--show-cdup'])
104 script_path = os.path.dirname(sys.argv[0])
105 sys.path.append(script_path)
106 try:
107 import trychange
108 except ImportError, e:
109 print "Error trying to import trychange from", script_path
110 print "git-try expects to live at depot_tools/git-try"
111 raise e
112 trychange.checkout_root = os.path.abspath(root_dir) 112 trychange.checkout_root = os.path.abspath(root_dir)
113 trychange.TryChange(args, None, False) 113 trychange.TryChange(args, None, False)
114 114
115 115
116 def WriteTryDiffHTTP(config, patch_name, diff, options):
117 """Put a patch on the try server."""
118 params = {
119 'user': getpass.getuser(),
120 'name': patch_name,
121 'patch': diff
122 }
123
124 if GetRietveldPatchsetNumber():
125 params['issue'] = GetRietveldIssueNumber()
126 params['patchset'] = GetRietveldPatchsetNumber()
127
128 if options.bot:
129 params['bot'] = options.bot
130
131 if options.clobber:
132 params['clobber'] = 'true'
133
134 url = 'http://%s:%s/send_try_patch' % (config['try_server_http_host'],
135 config['try_server_http_port'])
136 connection = urllib.urlopen(url, urllib.urlencode(params))
137 response = connection.read()
138 if (response != 'OK'):
139 print "Error posting to", url
140 print response
141 assert False
142
143
144 if __name__ == '__main__': 116 if __name__ == '__main__':
145 parser = optparse.OptionParser( 117 parser = optparse.OptionParser(
146 usage='git try [options] [branch]', 118 usage='git try [options] [branch]',
147 description='Upload the current diff of branch...HEAD to the try server.') 119 description='Upload the current diff of branch...HEAD to the try server.')
148 parser.add_option("-b", "--bot", 120 parser.add_option("-b", "--bot",
149 help="Force the use of a specific build slave (eg mac, " 121 help="Force the use of a specific build slave (eg mac, "
150 "win, or linux)") 122 "win, or linux)")
151 parser.add_option("-c", "--clobber", action="store_true", 123 parser.add_option("-c", "--clobber", action="store_true",
152 help="Make the try run use be a clobber build") 124 help="Make the try run use be a clobber build")
153 parser.add_option("-r", "--revision", 125 parser.add_option("-r", "--revision",
154 help="Specify the SVN base revision to use") 126 help="Specify the SVN base revision to use")
155 (options, args) = parser.parse_args(sys.argv) 127 (options, args) = parser.parse_args(sys.argv)
156 128
157 branch = None 129 branch = None
158 if len(args) > 1: 130 if len(args) > 1:
159 branch = args[1] 131 branch = args[1]
160 132
161 patch_name = GetPatchName() 133 patch_name = GetPatchName()
162 diff = GetMungedDiff(branch) 134 diff = GetMungedDiff(branch)
163 135
164 # Send directly to try server if we can parse the config, otherwise 136 # Write the diff out to a temporary file
137 diff_file = tempfile.NamedTemporaryFile()
138 diff_file.write(diff)
139 diff_file.flush()
140
141 email = GetEmail()
142 user = email.partition('@')[0]
143 args = [
144 '-u', user,
145 '-e', email,
146 '-n', patch_name,
147 '--diff', diff_file.name,
148 ]
149
150 # Send to try server via HTTP if we can parse the config, otherwise
165 # upload via SVN. 151 # upload via SVN.
166 config = GetTryServerConfig() 152 config = GetTryServerConfig()
167 if config is not None: 153 if config is not None:
168 print "Sending %s using HTTP..." % patch_name 154 sendmsg = "Sending %s using HTTP..." % patch_name
169 WriteTryDiffHTTP(config=config, patch_name=patch_name, diff=diff, 155 args.extend(['--use_http'])
170 options=options) 156 if config['try_server_http_host'] is not None:
157 args.extend(['--host', config['try_server_http_host']])
158 if config['try_server_http_port'] is not None:
159 args.extend(['--port', config['try_server_http_port']])
160
171 else: 161 else:
172 print "Could not get server config -- if you're within Google, " 162 print "Could not get server config -- if you're within Google, "
173 print "do you have have src-internal checked out?" 163 print "do you have have src-internal checked out?"
174 print "Sending %s using SVN..." % patch_name 164 sendmsg = "Sending %s using SVN..." % patch_name
165 args.extend([
166 '--use_svn', '--svn_repo',
167 'svn://svn.chromium.org/chrome-try/try',
M-A Ruel 2009/08/25 20:56:50 Err, you may break folks with that but I guess it'
168 ])
175 169
176 # Write the diff out to a temporary file 170 if options.bot:
177 diff_file = tempfile.NamedTemporaryFile() 171 args.extend(['--bot', options.bot])
178 diff_file.write(diff) 172 if options.clobber:
179 diff_file.flush() 173 args.append('--clobber')
174 if options.revision:
175 args.extend(['-r', options.revision])
176 else:
177 args.extend(['-r', GetRevision()])
178 if GetRietveldPatchsetNumber():
179 args.extend([
180 '--issue', GetRietveldIssueNumber(),
181 '--patchset', GetRietveldPatchsetNumber(),
182 ])
180 183
181 email = GetEmail() 184 print sendmsg
182 user = email.partition('@')[0] 185 TryChange(args=args)
183 args = [
184 '--use_svn',
185 '--svn_repo', 'svn://svn.chromium.org/chrome-try/try',
186 '-u', user,
187 '-e', email,
188 '-n', patch_name,
189 '--diff', diff_file.name,
190 ]
191 if options.bot:
192 args.extend(['--bot', options.bot])
193 if options.clobber:
194 args.append('--clobber')
195 if options.revision:
196 args.extend(['-r', options.revision])
197 else:
198 args.extend(['-r', GetRevision()])
199 if GetRietveldPatchsetNumber():
200 args.extend([
201 '--issue', GetRietveldIssueNumber(),
202 '--patchset', GetRietveldPatchsetNumber(),
203 ])
204 TryChange(args=args)
OLDNEW
« 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