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

Side by Side Diff: pending_manager.py

Issue 6813044: Add relative path support. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/commit-queue
Patch Set: Created 9 years, 8 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 | tests/pending_manager_test.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # coding=utf8 1 # coding=utf8
2 # Copyright (c) 2010 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2010 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 """Commit queue manager class. 5 """Commit queue manager class.
6 6
7 Security implications: 7 Security implications:
8 8
9 The following hypothesis are made: 9 The following hypothesis are made:
10 - Commit queue: 10 - Commit queue:
(...skipping 11 matching lines...) Expand all
22 22
23 import find_depot_tools # pylint: disable=W0611 23 import find_depot_tools # pylint: disable=W0611
24 import breakpad 24 import breakpad
25 import patch 25 import patch
26 26
27 import checkout 27 import checkout
28 import model 28 import model
29 from verification import base 29 from verification import base
30 30
31 31
32 def TODO(string):
33 logging.warning(string)
34
35
36 def send_stack(e): 32 def send_stack(e):
37 breakpad.SendStack(e, 33 breakpad.SendStack(e,
38 ''.join(traceback.format_tb(sys.exc_info()[2])), 34 ''.join(traceback.format_tb(sys.exc_info()[2])),
39 maxlen=2000) 35 maxlen=2000)
40 36
41 37
42 class PendingCommit(base.Verified): 38 class PendingCommit(base.Verified):
43 """Represents a pending commit that is being processed.""" 39 """Represents a pending commit that is being processed."""
44 persistent = base.Verified.persistent + [ 40 persistent = base.Verified.persistent + [
45 # Important since they tell if we need to revalidate and send try jobs 41 # Important since they tell if we need to revalidate and send try jobs
46 # again or not if any of these value changes. 42 # again or not if any of these value changes.
47 'issue', 'patchset', 'rietveld_server', 'description', 43 'issue', 'patchset', 'rietveld_server', 'description',
48 'files', 44 'files',
49 # Only a cache, these values can be regenerated. 45 # Only a cache, these values can be regenerated.
50 'owner', 'reviewers', 'base_url', 'messages', 46 'owner', 'reviewers', 'base_url', 'messages', 'relpath',
51 # Only used after a patch was committed. Keeping here for completeness. 47 # Only used after a patch was committed. Keeping here for completeness.
52 'revision', 48 'revision',
53 ] 49 ]
54 50
55 def __init__(self, issue, owner, reviewers, patchset, base_url, description, 51 def __init__(self, issue, owner, reviewers, patchset, base_url, description,
56 messages, rietveld_server): 52 messages, rietveld_server):
57 super(PendingCommit, self).__init__() 53 super(PendingCommit, self).__init__()
58 self.issue = issue 54 self.issue = issue
59 self.owner = owner 55 self.owner = owner
60 self.reviewers = reviewers 56 self.reviewers = reviewers
61 self.patchset = patchset 57 self.patchset = patchset
62 self.base_url = base_url 58 self.base_url = base_url
63 self.rietveld_server = rietveld_server 59 self.rietveld_server = rietveld_server
64 self.description = description 60 self.description = description
65 self.messages = messages 61 self.messages = messages
66 self.revision = None 62 self.revision = None
63 self.relpath = ''
67 self.files = [] 64 self.files = []
68 65
69 def patch_url(self): 66 def patch_url(self):
70 return ('%s/download/issue%d_%d.diff' % 67 return ('%s/download/issue%d_%d.diff' %
71 (self.rietveld_server, self.issue, self.patchset)) 68 (self.rietveld_server, self.issue, self.patchset))
72 69
73 def pending_name(self): 70 def pending_name(self):
74 """The name that should be used for try jobs. 71 """The name that should be used for try jobs.
75 72
76 It makes it possible to regenerate the try_jobs array if ever needed.""" 73 It makes it possible to regenerate the try_jobs array if ever needed."""
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 except ValueError: 272 except ValueError:
276 pass 273 pass
277 274
278 def _apply_patch(self, pending, revision): 275 def _apply_patch(self, pending, revision):
279 """Applies the pending patch to the checkout and throws if it fails. 276 """Applies the pending patch to the checkout and throws if it fails.
280 277
281 This function assumes self.checkout.prepare() was called right before. 278 This function assumes self.checkout.prepare() was called right before.
282 """ 279 """
283 try: 280 try:
284 patches = self.rietveld.get_patch(pending.issue, pending.patchset) 281 patches = self.rietveld.get_patch(pending.issue, pending.patchset)
282 if not patches:
283 raise base.DiscardPending(
284 pending, 'No diff was found for this patchset.')
285 if pending.relpath:
286 patches.set_relpath(pending.relpath)
285 pending.files = [p.filename for p in patches] 287 pending.files = [p.filename for p in patches]
286 if not pending.files: 288 if not pending.files:
287 raise base.DiscardPending(pending, 'No diff found.') 289 raise base.DiscardPending(
290 pending, 'No file was found in this patchset.')
288 self.checkout.apply_patch(patches) 291 self.checkout.apply_patch(patches)
289 except checkout.PatchApplicationFailed, e: 292 except checkout.PatchApplicationFailed, e:
290 out = 'Can\'t apply patch for file %s.' % e.filename 293 out = 'Can\'t apply patch for file %s.' % e.filename
291 if e.status: 294 if e.status:
292 out += '\n%s' % e.status 295 out += '\n%s' % e.status
293 raise base.DiscardPending(pending, out) 296 raise base.DiscardPending(pending, out)
294 except patch.UnsupportedPatchFormat, e: 297 except patch.UnsupportedPatchFormat, e:
295 raise base.DiscardPending(pending, str(e)) 298 raise base.DiscardPending(pending, str(e))
296 except subprocess.CalledProcessError, e: 299 except subprocess.CalledProcessError, e:
297 stdout = getattr(e, 'stdout', '') 300 stdout = getattr(e, 'stdout', '')
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 raise base.DiscardPending(pending, out) 334 raise base.DiscardPending(pending, out)
332 335
333 def load(self, filename): 336 def load(self, filename):
334 """Loads the commit queue state from a JSON file.""" 337 """Loads the commit queue state from a JSON file."""
335 self.queue = model.load_from_json_file(filename) 338 self.queue = model.load_from_json_file(filename)
336 self.queue.pending_commits = self.queue.pending_commits or [] 339 self.queue.pending_commits = self.queue.pending_commits or []
337 340
338 def save(self, filename): 341 def save(self, filename):
339 """Save the commit queue state in a simple JSON file.""" 342 """Save the commit queue state in a simple JSON file."""
340 model.save_to_json_file(filename, self.queue) 343 model.save_to_json_file(filename, self.queue)
OLDNEW
« no previous file with comments | « no previous file | tests/pending_manager_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698