Skip to content

Commit

Permalink
Merge commit 'ed8d49e2176a4f299a88805dced3b6fdb4c3c1d9' into ninepep8fix
Browse files Browse the repository at this point in the history
Conflicts:
	master/buildbot/buildslave/base.py
	master/buildbot/changes/base.py
	master/buildbot/changes/bonsaipoller.py
	master/buildbot/changes/changes.py
	master/buildbot/changes/gerritchangesource.py
	master/buildbot/changes/gitpoller.py
	master/buildbot/changes/hgpoller.py
	master/buildbot/changes/manager.py
	master/buildbot/changes/p4poller.py
	master/buildbot/changes/pb.py
	master/buildbot/changes/svnpoller.py
	master/buildbot/config.py
	master/buildbot/data/exceptions.py
	master/buildbot/data/patches.py
	master/buildbot/db/base.py
	master/buildbot/db/buildrequests.py
	master/buildbot/db/builds.py
	master/buildbot/db/buildsets.py
	master/buildbot/db/buildslaves.py
	master/buildbot/db/changes.py
	master/buildbot/db/connector.py
	master/buildbot/db/migrate/versions/001_initial.py
	master/buildbot/db/model.py
	master/buildbot/db/schedulers.py
	master/buildbot/db/sourcestamps.py
	master/buildbot/interfaces.py
	master/buildbot/manhole.py
	master/buildbot/master.py
	master/buildbot/pbmanager.py
	master/buildbot/process/botmaster.py
	master/buildbot/process/build.py
	master/buildbot/process/builder.py
	master/buildbot/process/buildrequest.py
	master/buildbot/process/buildrequestdistributor.py
	master/buildbot/process/buildstep.py
	master/buildbot/process/cache.py
	master/buildbot/process/debug.py
	master/buildbot/process/metrics.py
	master/buildbot/process/slavebuilder.py
	master/buildbot/process/subunitlogobserver.py
	master/buildbot/process/users/manual.py
	master/buildbot/schedulers/base.py
	master/buildbot/schedulers/basic.py
	master/buildbot/schedulers/dependent.py
	master/buildbot/schedulers/forcesched.py
	master/buildbot/schedulers/timed.py
	master/buildbot/schedulers/triggerable.py
	master/buildbot/schedulers/trysched.py
	master/buildbot/scripts/create_master.py
	master/buildbot/scripts/runner.py
	master/buildbot/sourcestamp.py
	master/buildbot/status/base.py
	master/buildbot/status/build.py
	master/buildbot/status/builder.py
	master/buildbot/status/mail.py
	master/buildbot/status/master.py
	master/buildbot/status/persistent_queue.py
	master/buildbot/status/tinderbox.py
	master/buildbot/status/web/auth.py
	master/buildbot/status/web/authz.py
	master/buildbot/status/web/base.py
	master/buildbot/status/web/baseweb.py
	master/buildbot/status/web/build.py
	master/buildbot/status/web/builder.py
	master/buildbot/status/web/buildstatus.py
	master/buildbot/status/web/change_hook.py
	master/buildbot/status/web/changes.py
	master/buildbot/status/web/console.py
	master/buildbot/status/web/feeds.py
	master/buildbot/status/web/grid.py
	master/buildbot/status/web/logs.py
	master/buildbot/status/web/olpb.py
	master/buildbot/status/web/pngstatus.py
	master/buildbot/status/web/root.py
	master/buildbot/status/web/session.py
	master/buildbot/status/web/slaves.py
	master/buildbot/status/web/status_json.py
	master/buildbot/status/web/step.py
	master/buildbot/status/web/tests.py
	master/buildbot/status/web/users.py
	master/buildbot/status/web/waterfall.py
	master/buildbot/status/words.py
	master/buildbot/steps/package/deb/pbuilder.py
	master/buildbot/steps/package/rpm/mock.py
	master/buildbot/steps/shell.py
	master/buildbot/steps/slave.py
	master/buildbot/steps/source/base.py
	master/buildbot/steps/source/bzr.py
	master/buildbot/steps/source/cvs.py
	master/buildbot/steps/source/darcs.py
	master/buildbot/steps/source/git.py
	master/buildbot/steps/source/mercurial.py
	master/buildbot/steps/source/mtn.py
	master/buildbot/steps/source/svn.py
	master/buildbot/steps/subunit.py
	master/buildbot/steps/transfer.py
	master/buildbot/steps/trigger.py
	master/buildbot/test/__init__.py
	master/buildbot/test/fake/botmaster.py
	master/buildbot/test/fake/fakedb.py
	master/buildbot/test/fake/fakemaster.py
	master/buildbot/test/fake/pbmanager.py
	master/buildbot/test/fuzz/test_lru.py
	master/buildbot/test/integration/test_master.py
	master/buildbot/test/integration/test_slave_comm.py
	master/buildbot/test/integration/test_upgrade.py
	master/buildbot/test/regressions/test_bad_change_properties_rows.py
	master/buildbot/test/regressions/test_oldpaths.py
	master/buildbot/test/regressions/test_shell_command_properties.py
	master/buildbot/test/regressions/test_unpickling.py
	master/buildbot/test/test_extra_coverage.py
	master/buildbot/test/unit/test_buildslave_base.py
	master/buildbot/test/unit/test_changes_base.py
	master/buildbot/test/unit/test_changes_bonsaipoller.py
	master/buildbot/test/unit/test_changes_changes.py
	master/buildbot/test/unit/test_changes_gerritchangesource.py
	master/buildbot/test/unit/test_changes_gitpoller.py
	master/buildbot/test/unit/test_changes_hgpoller.py
	master/buildbot/test/unit/test_changes_manager.py
	master/buildbot/test/unit/test_changes_p4poller.py
	master/buildbot/test/unit/test_changes_pb.py
	master/buildbot/test/unit/test_changes_svnpoller.py
	master/buildbot/test/unit/test_config.py
	master/buildbot/test/unit/test_db_base.py
	master/buildbot/test/unit/test_db_buildrequests.py
	master/buildbot/test/unit/test_db_builds.py
	master/buildbot/test/unit/test_db_buildsets.py
	master/buildbot/test/unit/test_db_buildslaves.py
	master/buildbot/test/unit/test_db_changes.py
	master/buildbot/test/unit/test_db_connector.py
	master/buildbot/test/unit/test_db_schedulers.py
	master/buildbot/test/unit/test_db_sourcestamps.py
	master/buildbot/test/unit/test_db_sourcestampsets.py
	master/buildbot/test/unit/test_db_users.py
	master/buildbot/test/unit/test_master.py
	master/buildbot/test/unit/test_mq_simple.py
	master/buildbot/test/unit/test_process_botmaster_BotMaster.py
	master/buildbot/test/unit/test_process_botmaster_DuplicateSlaveArbitrator.py
	master/buildbot/test/unit/test_process_build.py
	master/buildbot/test/unit/test_process_builder.py
	master/buildbot/test/unit/test_process_buildrequest.py
	master/buildbot/test/unit/test_process_buildrequestdistributor_BuildRequestDistributor.py
	master/buildbot/test/unit/test_process_buildstep.py
	master/buildbot/test/unit/test_process_debug.py
	master/buildbot/test/unit/test_process_users_manager.py
	master/buildbot/test/unit/test_process_users_manual.py
	master/buildbot/test/unit/test_process_users_users.py
	master/buildbot/test/unit/test_remotecommand.py
	master/buildbot/test/unit/test_schedulers_base.py
	master/buildbot/test/unit/test_schedulers_basic.py
	master/buildbot/test/unit/test_schedulers_dependent.py
	master/buildbot/test/unit/test_schedulers_forcesched.py
	master/buildbot/test/unit/test_schedulers_timed_Nightly.py
	master/buildbot/test/unit/test_schedulers_timed_NightlyTriggerable.py
	master/buildbot/test/unit/test_schedulers_timed_Periodic.py
	master/buildbot/test/unit/test_schedulers_triggerable.py
	master/buildbot/test/unit/test_schedulers_trysched.py
	master/buildbot/test/unit/test_scripts_create_master.py
	master/buildbot/test/unit/test_scripts_upgrade_master.py
	master/buildbot/test/unit/test_sourcestamp.py
	master/buildbot/test/unit/test_status_build.py
	master/buildbot/test/unit/test_status_client.py
	master/buildbot/test/unit/test_status_logfile.py
	master/buildbot/test/unit/test_status_mail.py
	master/buildbot/test/unit/test_status_master.py
	master/buildbot/test/unit/test_status_web_auth_HTPasswdAprAuth.py
	master/buildbot/test/unit/test_status_web_auth_HTPasswdAuth.py
	master/buildbot/test/unit/test_status_web_authz_Authz.py
	master/buildbot/test/unit/test_status_web_base.py
	master/buildbot/test/unit/test_status_web_hook.py
	master/buildbot/test/unit/test_status_web_hooks_bitbucket.py
	master/buildbot/test/unit/test_status_web_hooks_github.py
	master/buildbot/test/unit/test_status_web_hooks_gitlab.py
	master/buildbot/test/unit/test_status_web_hooks_gitorious.py
	master/buildbot/test/unit/test_status_web_hooks_googlecode.py
	master/buildbot/test/unit/test_status_web_hooks_poller.py
	master/buildbot/test/unit/test_status_web_links.py
	master/buildbot/test/unit/test_status_web_statuspng.py
	master/buildbot/test/unit/test_steps_subunit.py
	master/buildbot/test/unit/test_steps_trigger.py
	master/buildbot/test/unit/test_util.py
	master/buildbot/test/unit/test_util_misc.py
	master/buildbot/test/util/change_import.py
	master/buildbot/test/util/changesource.py
	master/buildbot/test/util/interfaces.py
	master/buildbot/test/util/scheduler.py
	master/buildbot/test/util/steps.py
	master/buildbot/util/__init__.py
	master/buildbot/util/maildir.py
	master/buildbot/util/misc.py
	master/buildbot/util/sautils.py
	master/contrib/fakemaster.py
	master/contrib/fix_changes_pickle_encoding.py
	master/contrib/googlecode_atom.py
	master/docs/bbdocs/ext.py
	master/setup.py
  • Loading branch information
Pierre Tardy committed Nov 7, 2013
2 parents eccbc8a + ed8d49e commit 0547082
Show file tree
Hide file tree
Showing 346 changed files with 9,647 additions and 8,062 deletions.
8 changes: 4 additions & 4 deletions common/fiximports.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,15 +58,14 @@ def analyzeLine(self, filename, line, lineNb):
res = False
return res


def importOrder(self, line):
'''
I define how import lines should be sorted
return a tuple of order criterias sorted be importance
'''
ret= ( "__future__" not in line, # always put __future__ import first
self._regexFromImport.match(line) is not None, # import before from import
line, # then lexicographic order
ret = ("__future__" not in line, # always put __future__ import first
self._regexFromImport.match(line) is not None, # import before from import
line, # then lexicographic order
)
return ret

Expand All @@ -88,6 +87,7 @@ def sortImportGroups(self, filename, data=None):
newlines = []
self.groups = []
self.group_start = None

def maybeEndGroup():
if self.group_start is not None:
self.groups.append((self.group_start, len(newlines)))
Expand Down
16 changes: 9 additions & 7 deletions common/test_fiximports.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@
from textwrap import dedent
from twisted.trial import unittest


class TestFixImports(unittest.TestCase):

def setUp(self):
self.fiximports = FixImports()
self.fiximports.printErrorMsg = lambda *_:None
self.fiximports.printErrorMsg = lambda *_: None

def oneTest(self, src, expected):
src = dedent(src)
Expand All @@ -19,7 +21,7 @@ def testBasic(self):
from twisted.internet import defer
from twisted.trial import unittest
from fiximports import FixImports
""","""
""", """
from fiximports import FixImports
from twisted.internet import defer
from twisted.trial import unittest
Expand All @@ -31,7 +33,7 @@ def testGroups(self):
from twisted.trial import unittest
from fiximports import FixImports
""","""
""", """
from twisted.internet import defer
from twisted.trial import unittest
Expand All @@ -43,7 +45,7 @@ def testMixImports(self):
from twisted.internet import defer
from twisted.trial import unittest
import fiximports
""","""
""", """
import fiximports
from twisted.internet import defer
Expand All @@ -56,7 +58,7 @@ def testDontSort(self):
reactor
from twisted.trial import unittest
import fiximports
""","""
""", """
from twisted.internet import defer,\\
reactor
from twisted.trial import unittest
Expand All @@ -69,11 +71,11 @@ def testFutureFirst(self):
from twisted.internet import defer
from twisted.trial import unittest
import fiximports
""","""
""", """
from __future__ import with_statement
import fiximports
from twisted.internet import defer
from twisted.trial import unittest
""")
""")
2 changes: 1 addition & 1 deletion master/buildbot/buildrequest.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@
# Copyright Buildbot Team Members

from buildbot.process.buildrequest import BuildRequest
_hush_pyflakes = [ BuildRequest ]
_hush_pyflakes = [BuildRequest]
2 changes: 1 addition & 1 deletion master/buildbot/buildslave/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,4 @@
AbstractBuildSlave, BuildSlave, AbstractLatentBuildSlave)

_hush_pyflakes = [
AbstractBuildSlave, BuildSlave, AbstractLatentBuildSlave ]
AbstractBuildSlave, BuildSlave, AbstractLatentBuildSlave]
38 changes: 20 additions & 18 deletions master/buildbot/buildslave/ec2.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,30 +28,33 @@
import boto
import boto.ec2
import boto.exception
from twisted.internet import defer, threads

from twisted.internet import defer
from twisted.internet import threads
from twisted.python import log

from buildbot.buildslave.base import AbstractLatentBuildSlave
from buildbot import interfaces
from buildbot.buildslave.base import AbstractLatentBuildSlave

PENDING = 'pending'
RUNNING = 'running'
SHUTTINGDOWN = 'shutting-down'
TERMINATED = 'terminated'


class EC2LatentBuildSlave(AbstractLatentBuildSlave):

instance = image = None
_poll_resolution = 5 # hook point for tests
_poll_resolution = 5 # hook point for tests

def __init__(self, name, password, instance_type, ami=None,
valid_ami_owners=None, valid_ami_location_regex=None,
elastic_ip=None, identifier=None, secret_identifier=None,
aws_id_file_path=None, user_data=None, region=None,
keypair_name='latent_buildbot_slave',
security_name='latent_buildbot_slave',
max_builds=None, notify_on_missing=[], missing_timeout=60*20,
build_wait_timeout=60*10, properties={}, locks=None):
max_builds=None, notify_on_missing=[], missing_timeout=60 * 20,
build_wait_timeout=60 * 10, properties={}, locks=None):

AbstractLatentBuildSlave.__init__(
self, name, password, max_builds, notify_on_missing,
Expand Down Expand Up @@ -102,10 +105,10 @@ def __init__(self, name, password, instance_type, ami=None,
secret_identifier = aws_file.readline().strip()
else:
assert aws_id_file_path is None, \
'if you supply the identifier and secret_identifier, ' \
'do not specify the aws_id_file_path'
'if you supply the identifier and secret_identifier, ' \
'do not specify the aws_id_file_path'
assert secret_identifier is not None, \
'supply both or neither of identifier, secret_identifier'
'supply both or neither of identifier, secret_identifier'

region_found = None

Expand All @@ -117,11 +120,10 @@ def __init__(self, name, password, instance_type, ami=None,
if r.name == region:
region_found = r


if region_found is not None:
self.conn = boto.ec2.connect_to_region(region,
aws_access_key_id=identifier,
aws_secret_access_key=secret_identifier)
aws_access_key_id=identifier,
aws_secret_access_key=secret_identifier)
else:
raise ValueError('The specified region does not exist: {0}'.format(region))

Expand Down Expand Up @@ -223,12 +225,12 @@ def get_image(self):
else:
options = [(image.location, image.id, image) for image
in self.conn.get_all_images(
owners=self.valid_ami_owners)]
owners=self.valid_ami_owners)]
options.sort()
log.msg('sorted images (last is chosen): %s' %
(', '.join(
['%s (%s)' % (candidate[-1].id, candidate[-1].location)
for candidate in options])))
for candidate in options])))
if not options:
raise ValueError('no available images match constraints')
return options[-1][-1]
Expand Down Expand Up @@ -259,12 +261,12 @@ def _start_instance(self):
duration += interval
if duration % 60 == 0:
log.msg('%s %s has waited %d minutes for instance %s' %
(self.__class__.__name__, self.slavename, duration//60,
(self.__class__.__name__, self.slavename, duration // 60,
self.instance.id))
self.instance.update()
if self.instance.state == RUNNING:
self.output = self.instance.get_console_output()
minutes = duration//60
minutes = duration // 60
seconds = duration % 60
log.msg('%s %s instance %s started on %s '
'in about %d minutes %d seconds (%s)' %
Expand All @@ -275,7 +277,7 @@ def _start_instance(self):
self.instance.use_ip(self.elastic_ip)
return [self.instance.id,
image.id,
'%02d:%02d:%02d' % (minutes//60, minutes % 60, seconds)]
'%02d:%02d:%02d' % (minutes // 60, minutes % 60, seconds)]
else:
log.msg('%s %s failed to start instance %s (%s)' %
(self.__class__.__name__, self.slavename,
Expand Down Expand Up @@ -315,10 +317,10 @@ def _stop_instance(self, instance, fast):
if duration % 60 == 0:
log.msg(
'%s %s has waited %d minutes for instance %s to end' %
(self.__class__.__name__, self.slavename, duration//60,
(self.__class__.__name__, self.slavename, duration // 60,
instance.id))
instance.update()
log.msg('%s %s instance %s %s '
'after about %d minutes %d seconds' %
(self.__class__.__name__, self.slavename,
instance.id, goal, duration//60, duration % 60))
instance.id, goal, duration // 60, duration % 60))
27 changes: 16 additions & 11 deletions master/buildbot/buildslave/libvirt.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,18 @@
# Portions Copyright 2010 Isotoma Limited

from __future__ import absolute_import

import os

from twisted.internet import defer, utils, threads
from twisted.python import log, failure
from buildbot.buildslave.base import AbstractBuildSlave, AbstractLatentBuildSlave
from buildbot.util.eventual import eventually
from buildbot import config
from buildbot.buildslave.base import AbstractBuildSlave
from buildbot.buildslave.base import AbstractLatentBuildSlave
from buildbot.util.eventual import eventually
from twisted.internet import defer
from twisted.internet import threads
from twisted.internet import utils
from twisted.python import failure
from twisted.python import log

try:
import libvirt
Expand All @@ -31,6 +36,7 @@


class WorkQueue(object):

"""
I am a class that turns parallel access into serial access.
Expand Down Expand Up @@ -60,7 +66,7 @@ def _process(self):
except:
d2 = defer.fail()

# Whenever a piece of work is done, whether it worked or not
# Whenever a piece of work is done, whether it worked or not
# call this to schedule the next piece of work
def _work_done(res):
log.msg("Completed a piece of work")
Expand Down Expand Up @@ -151,8 +157,8 @@ def all(self):

class LibVirtSlave(AbstractLatentBuildSlave):

def __init__(self, name, password, connection, hd_image, base_image = None, xml=None, max_builds=None, notify_on_missing=[],
missing_timeout=60*20, build_wait_timeout=60*10, properties={}, locks=None):
def __init__(self, name, password, connection, hd_image, base_image=None, xml=None, max_builds=None, notify_on_missing=[],
missing_timeout=60 * 20, build_wait_timeout=60 * 10, properties={}, locks=None):
AbstractLatentBuildSlave.__init__(self, name, password, max_builds, notify_on_missing,
missing_timeout, build_wait_timeout, properties, locks)

Expand Down Expand Up @@ -218,9 +224,9 @@ def _prepare_base_image(self):
clone_args = "%(base)s %(image)s"

clone_args = clone_args % {
"base": self.base_image,
"image": self.image,
}
"base": self.base_image,
"image": self.image,
}

log.msg("Cloning base image: %s %s'" % (clone_cmd, clone_args))

Expand Down Expand Up @@ -299,4 +305,3 @@ def _disconnected(res):
d.addBoth(_disconnected)

return d

19 changes: 11 additions & 8 deletions master/buildbot/buildslave/openstack.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,13 @@

import time

from twisted.internet import defer, threads
from twisted.internet import defer
from twisted.internet import threads
from twisted.python import log

from buildbot import config
from buildbot import interfaces
from buildbot.buildslave.base import AbstractLatentBuildSlave
from buildbot import config, interfaces

try:
import novaclient.exceptions as nce
Expand All @@ -36,10 +38,11 @@
DELETED = 'DELETED'
UNKNOWN = 'UNKNOWN'


class OpenStackLatentBuildSlave(AbstractLatentBuildSlave):

instance = None
_poll_resolution = 5 # hook point for tests
_poll_resolution = 5 # hook point for tests

def __init__(self, name, password,
flavor,
Expand All @@ -49,8 +52,8 @@ def __init__(self, name, password,
os_tenant_name,
os_auth_url,
meta=None,
max_builds=None, notify_on_missing=[], missing_timeout=60*20,
build_wait_timeout=60*10, properties={}, locks=None):
max_builds=None, notify_on_missing=[], missing_timeout=60 * 20,
build_wait_timeout=60 * 10, properties={}, locks=None):

if not client or not nce:
config.error("The python module 'novaclient' is needed "
Expand Down Expand Up @@ -104,7 +107,7 @@ def _start_instance(self):
duration += interval
if duration % 60 == 0:
log.msg('%s %s has waited %d minutes for instance %s' %
(self.__class__.__name__, self.slavename, duration//60,
(self.__class__.__name__, self.slavename, duration // 60,
instance.id))
try:
inst = os_client.servers.get(instance.id)
Expand All @@ -115,14 +118,14 @@ def _start_instance(self):
raise interfaces.LatentBuildSlaveFailedToSubstantiate(
instance.id, instance.status)
if inst.status == ACTIVE:
minutes = duration//60
minutes = duration // 60
seconds = duration % 60
log.msg('%s %s instance %s (%s) started '
'in about %d minutes %d seconds' %
(self.__class__.__name__, self.slavename,
instance.id, instance.name, minutes, seconds))
return [instance.id, image_uuid,
'%02d:%02d:%02d' % (minutes//60, minutes % 60, seconds)]
'%02d:%02d:%02d' % (minutes // 60, minutes % 60, seconds)]
else:
log.msg('%s %s failed to start instance %s (%s)' %
(self.__class__.__name__, self.slavename,
Expand Down
Loading

0 comments on commit 0547082

Please sign in to comment.