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

Side by Side Diff: trychange.py

Issue 399070: Add scm.*.GetEmail() to retrieve the user email. Use this email for try job emails. (Closed)
Patch Set: Use CaptureInfo() Created 11 years, 1 month 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
« no previous file with comments | « tests/trychange_unittest.py ('k') | 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 # Copyright (c) 2009 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2009 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 """Client-side script to send a try job to the try server. It communicates to 5 """Client-side script to send a try job to the try server. It communicates to
6 the try server by either writting to a svn repository or by directly connecting 6 the try server by either writting to a svn repository or by directly connecting
7 to the server by HTTP. 7 to the server by HTTP.
8 """ 8 """
9 9
10 10
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 # Generate the diff with svn and write it to the submit queue path. The 168 # Generate the diff with svn and write it to the submit queue path. The
169 # files are relative to the repository root, but we need patches relative 169 # files are relative to the repository root, but we need patches relative
170 # to one level up from there (i.e., 'src'), so adjust both the file 170 # to one level up from there (i.e., 'src'), so adjust both the file
171 # paths and the root of the diff. 171 # paths and the root of the diff.
172 source_root = GetSourceRoot() 172 source_root = GetSourceRoot()
173 prefix = PathDifference(source_root, gcl.GetRepositoryRoot()) 173 prefix = PathDifference(source_root, gcl.GetRepositoryRoot())
174 adjusted_paths = [os.path.join(prefix, x) for x in self.options.files] 174 adjusted_paths = [os.path.join(prefix, x) for x in self.options.files]
175 self.options.diff = self.GenerateDiff(adjusted_paths, root=source_root) 175 self.options.diff = self.GenerateDiff(adjusted_paths, root=source_root)
176 self.change_info = gcl.LoadChangelistInfoForMultiple(self.options.name, 176 self.change_info = gcl.LoadChangelistInfoForMultiple(self.options.name,
177 gcl.GetRepositoryRoot(), True, True) 177 gcl.GetRepositoryRoot(), True, True)
178 if not self.options.email:
179 self.options.email = scm.SVN.GetEmail(gcl.GetRepositoryRoot())
178 180
179 181
180 class GIT(SCM): 182 class GIT(SCM):
181 """Gathers the options and diff for a git checkout.""" 183 """Gathers the options and diff for a git checkout."""
182 def GenerateDiff(self): 184 def GenerateDiff(self):
183 """Get the diff we'll send to the try server. We ignore the files list.""" 185 """Get the diff we'll send to the try server. We ignore the files list."""
184 branch = upload.RunShell(['git', 'cl', 'upstream']).strip() 186 branch = upload.RunShell(['git', 'cl', 'upstream']).strip()
185 diff = upload.RunShell(['git', 'diff-tree', '-p', '--no-prefix', 187 diff = upload.RunShell(['git', 'diff-tree', '-p', '--no-prefix',
186 branch, 'HEAD']).splitlines(True) 188 branch, 'HEAD']).splitlines(True)
187 for i in range(len(diff)): 189 for i in range(len(diff)):
188 # In the case of added files, replace /dev/null with the path to the 190 # In the case of added files, replace /dev/null with the path to the
189 # file being added. 191 # file being added.
190 if diff[i].startswith('--- /dev/null'): 192 if diff[i].startswith('--- /dev/null'):
191 diff[i] = '--- %s' % diff[i+1][4:] 193 diff[i] = '--- %s' % diff[i+1][4:]
192 return ''.join(diff) 194 return ''.join(diff)
193 195
194 def GetEmail(self):
195 # TODO: check for errors here?
196 return upload.RunShell(['git', 'config', 'user.email']).strip()
197
198 def GetFileNames(self): 196 def GetFileNames(self):
199 """Return the list of files in the diff.""" 197 """Return the list of files in the diff."""
200 return self.options.files 198 return self.options.files
201 199
202 def GetLocalRoot(self): 200 def GetLocalRoot(self):
203 """Return the path of the repository root.""" 201 """Return the path of the repository root."""
204 # TODO: check for errors here? 202 # TODO: check for errors here?
205 root = upload.RunShell(['git', 'rev-parse', '--show-cdup']).strip() 203 root = upload.RunShell(['git', 'rev-parse', '--show-cdup']).strip()
206 return os.path.abspath(root) 204 return os.path.abspath(root)
207 205
208 def GetPatchName(self): 206 def GetPatchName(self):
209 """Construct a name for this patch.""" 207 """Construct a name for this patch."""
210 # TODO: perhaps include the hash of the current commit, to distinguish 208 # TODO: perhaps include the hash of the current commit, to distinguish
211 # patches? 209 # patches?
212 branch = upload.RunShell(['git', 'symbolic-ref', 'HEAD']).strip() 210 branch = upload.RunShell(['git', 'symbolic-ref', 'HEAD']).strip()
213 if not branch.startswith('refs/heads/'): 211 if not branch.startswith('refs/heads/'):
214 # TODO(maruel): Find a better type. 212 # TODO(maruel): Find a better type.
215 raise NoTryServerAccess("Couldn't figure out branch name") 213 raise NoTryServerAccess("Couldn't figure out branch name")
216 branch = branch[len('refs/heads/'):] 214 branch = branch[len('refs/heads/'):]
217 return branch 215 return branch
218 216
219 def ProcessOptions(self): 217 def ProcessOptions(self):
220 if not self.options.diff: 218 if not self.options.diff:
221 self.options.diff = self.GenerateDiff() 219 self.options.diff = self.GenerateDiff()
222 if not self.options.name: 220 if not self.options.name:
223 self.options.name = self.GetPatchName() 221 self.options.name = self.GetPatchName()
224 if not self.options.email: 222 if not self.options.email:
225 self.options.email = self.GetEmail() 223 self.options.email = scm.GIT.GetEmail('.')
226 224
227 225
228 def _ParseSendChangeOptions(options): 226 def _ParseSendChangeOptions(options):
229 """Parse common options passed to _SendChangeHTTP and _SendChangeSVN.""" 227 """Parse common options passed to _SendChangeHTTP and _SendChangeSVN."""
230 values = {} 228 values = {}
231 if options.email: 229 if options.email:
232 values['email'] = options.email 230 values['email'] = options.email
233 values['user'] = options.user 231 values['user'] = options.user
234 values['name'] = options.name 232 values['name'] = options.name
235 if options.bot: 233 if options.bot:
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after
564 except (InvalidScript, NoTryServerAccess), e: 562 except (InvalidScript, NoTryServerAccess), e:
565 if swallow_exception: 563 if swallow_exception:
566 return 1 564 return 1
567 print e 565 print e
568 return 1 566 return 1
569 return 0 567 return 0
570 568
571 569
572 if __name__ == "__main__": 570 if __name__ == "__main__":
573 sys.exit(TryChange(None, None, False)) 571 sys.exit(TryChange(None, None, False))
OLDNEW
« no previous file with comments | « tests/trychange_unittest.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698