forked from buildbot/buildbot
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
schedulerdb 3-of-5: BuildRequest/BuildSet
The canonical storage of a build request is now in the DB, but a separate BuildRequest class is defined (in buildbot/buildrequest.py, split out from buildbot/process/base.py) to pass around to code that needs it. Likewise the old BuildSet class has been removed and its funcionality moved into the database. The scheduling methods on BuildSet (like waitUntilSuccess and start) have been subsumed by other changes to the Schedulers and Builders, so buildbot/buildset.py was removed altogether.
- Loading branch information
Showing
3 changed files
with
127 additions
and
225 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,122 @@ | ||
# ***** BEGIN LICENSE BLOCK ***** | ||
# Version: MPL 1.1/GPL 2.0/LGPL 2.1 | ||
# | ||
# The contents of this file are subject to the Mozilla Public License Version | ||
# 1.1 (the "License"); you may not use this file except in compliance with | ||
# the License. You may obtain a copy of the License at | ||
# http://www.mozilla.org/MPL/ | ||
# | ||
# Software distributed under the License is distributed on an "AS IS" basis, | ||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License | ||
# for the specific language governing rights and limitations under the | ||
# License. | ||
# | ||
# The Original Code is Mozilla-specific Buildbot steps. | ||
# | ||
# The Initial Developer of the Original Code is | ||
# Mozilla Foundation. | ||
# Portions created by the Initial Developer are Copyright (C) 2009 | ||
# the Initial Developer. All Rights Reserved. | ||
# | ||
# Contributor(s): | ||
# Brian Warner <warner@lothar.com> | ||
# | ||
# Alternatively, the contents of this file may be used under the terms of | ||
# either the GNU General Public License Version 2 or later (the "GPL"), or | ||
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), | ||
# in which case the provisions of the GPL or the LGPL are applicable instead | ||
# of those above. If you wish to allow use of your version of this file only | ||
# under the terms of either the GPL or the LGPL, and not to allow others to | ||
# use your version of this file under the terms of the MPL, indicate your | ||
# decision by deleting the provisions above and replace them with the notice | ||
# and other provisions required by the GPL or the LGPL. If you do not delete | ||
# the provisions above, a recipient may use your version of this file under | ||
# the terms of any one of the MPL, the GPL or the LGPL. | ||
# | ||
# ***** END LICENSE BLOCK ***** | ||
|
||
from buildbot import interfaces | ||
from buildbot.process.properties import Properties | ||
|
||
class BuildRequest: | ||
"""I represent a request to a specific Builder to run a single build. | ||
I am generated by db.getBuildRequestWithNumber, and am used to tell the | ||
Build about what it ought to be building. I am also used by the Builder | ||
to let hook functions decide which requests should be handled first. | ||
I have a SourceStamp which specifies what sources I will build. This may | ||
specify a specific revision of the source tree (so source.branch, | ||
source.revision, and source.patch are used). The .patch attribute is | ||
either None or a tuple of (patchlevel, diff), consisting of a number to | ||
use in 'patch -pN', and a unified-format context diff. | ||
Alternatively, the SourceStamp may specify a set of Changes to be built, | ||
contained in source.changes. In this case, I may be mergeable with other | ||
BuildRequests on the same branch. | ||
@type source: a L{buildbot.sourcestamp.SourceStamp} instance. | ||
@ivar source: the source code that this BuildRequest use | ||
@type reason: string | ||
@ivar reason: the reason this Build is being requested. Schedulers | ||
provide this, but for forced builds the user requesting the | ||
build will provide a string. | ||
@type properties: Properties object | ||
@ivar properties: properties that should be applied to this build | ||
'owner' property is used by Build objects to collect | ||
the list returned by getInterestedUsers | ||
@ivar status: the IBuildStatus object which tracks our status | ||
@ivar submittedAt: a timestamp (seconds since epoch) when this request | ||
was submitted to the Builder. This is used by the CVS | ||
step to compute a checkout timestamp, as well as the | ||
master to prioritize build requests from oldest to | ||
newest. | ||
""" | ||
|
||
source = None | ||
builder = None # XXXREMOVE | ||
startCount = 0 # how many times we have tried to start this build # XXXREMOVE | ||
submittedAt = None | ||
|
||
def __init__(self, reason, source, builderName, properties=None): | ||
assert interfaces.ISourceStamp(source, None) | ||
self.reason = reason | ||
self.source = source | ||
self.builderName = builderName | ||
|
||
self.properties = Properties() | ||
if properties: | ||
self.properties.updateFromProperties(properties) | ||
|
||
def canBeMergedWith(self, other): | ||
return self.source.canBeMergedWith(other.source) | ||
|
||
def mergeWith(self, others): | ||
return self.source.mergeWith([o.source for o in others]) | ||
|
||
def mergeReasons(self, others): | ||
"""Return a reason for the merged build request.""" | ||
reasons = [] | ||
for req in [self] + others: | ||
if req.reason and req.reason not in reasons: | ||
reasons.append(req.reason) | ||
return ", ".join(reasons) | ||
|
||
# IBuildRequestControl | ||
|
||
def cancel(self): # XXXREMOVE | ||
"""Cancel this request. This can only be successful if the Build has | ||
not yet been started. | ||
@return: a boolean indicating if the cancel was successful.""" | ||
if self.builder: | ||
return self.builder.cancelBuildRequest(self) | ||
return False | ||
|
||
def getSubmitTime(self): | ||
return self.submittedAt | ||
|
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters