only path taskinfo, scminfo, [srcdir] to plugin

This commit is contained in:
Yuming Zhu 2017-03-20 17:53:06 +08:00 committed by Mike McLean
parent 9bf49841ad
commit 89e82d6020
5 changed files with 45 additions and 63 deletions

View file

@ -1364,8 +1364,6 @@ class BuildMavenTask(BaseBuildTask):
scm = SCM(url)
scm.assert_allowed(self.options.allowed_scms)
self.run_plugin('preSCMCheckout', scminfo=scm.contextData())
repo_id = opts.get('repo_id')
if not repo_id:
raise koji.BuildError('A repo_id must be provided')
@ -1416,11 +1414,13 @@ class BuildMavenTask(BaseBuildTask):
logfile = self.workdir + '/checkout.log'
uploadpath = self.getUploadDir()
self.run_plugin('preSCMCheckout', scminfo=scm.get_info())
# Check out sources from the SCM
sourcedir = scm.checkout(scmdir, self.session, uploadpath, logfile)
self.run_plugin("postSCMCheckout",
scminfo=scm.contextData(),
extra_keys={"sourcedir": sourcedir})
scminfo=scm.get_info(),
srcdir=sourcedir)
# zip up pristine sources for auditing purposes
self._zip_dir(sourcedir, os.path.join(outputdir, 'scm-sources.zip'))
@ -1430,13 +1430,13 @@ class BuildMavenTask(BaseBuildTask):
patchlog = self.workdir + '/patches.log'
patch_scm = SCM(self.opts.get('patches'))
patch_scm.assert_allowed(self.options.allowed_scms)
self.run_plugin('preSCMCheckout', scminfo=patch_scm.contextData())
self.run_plugin('preSCMCheckout', scminfo=patch_scm.get_info())
# never try to check out a common/ dir when checking out patches
patch_scm.use_common = False
patchcheckoutdir = patch_scm.checkout(patchdir, self.session, uploadpath, patchlog)
self.run_plugin("postSCMCheckout",
scminfo=patch_scm.contextData(),
extra_keys={"sourcedir": patchcheckoutdir})
scminfo=patch_scm.get_info(),
srcdir=patchcheckoutdir)
self._zip_dir(patchcheckoutdir, os.path.join(outputdir, 'patches.zip'))
# Apply patches, if present
@ -1699,7 +1699,6 @@ class WrapperRPMTask(BaseBuildTask):
scm = SCM(spec_url)
scm.assert_allowed(self.options.allowed_scms)
self.run_plugin('preSCMCheckout', scminfo=scm.contextData())
repo_id = opts.get('repo_id')
if not repo_id:
@ -1718,10 +1717,11 @@ class WrapperRPMTask(BaseBuildTask):
logfile = os.path.join(self.workdir, 'checkout.log')
scmdir = buildroot.rootdir() + '/tmp/scmroot'
koji.ensuredir(scmdir)
self.run_plugin('preSCMCheckout', scminfo=scm.get_info())
specdir = scm.checkout(scmdir, self.session, self.getUploadDir(), logfile)
self.run_plugin("postSCMCheckout",
scminfo=scm.contextData(),
extra_keys={"sourcedir": specdir})
scminfo=scm.get_info(),
srcdir=specdir)
spec_template = None
for path, dir, files in os.walk(specdir):
@ -2653,12 +2653,12 @@ class ImageTask(BaseTaskHandler):
if self.opts.get('ksurl'):
scm = SCM(self.opts['ksurl'])
scm.assert_allowed(self.options.allowed_scms)
self.run_plugin('preSCMCheckout', scminfo=scm.contextData())
logfile = os.path.join(self.workdir, 'checkout.log')
self.run_plugin('preSCMCheckout', scminfo=scm.get_info())
scmsrcdir = scm.checkout(scmdir, self.session, self.getUploadDir(), logfile)
self.run_plugin("postSCMCheckout",
scminfo=scm.contextData(),
extra_keys={"sourcedir": scmsrcdir})
scminfo=scm.get_info(),
srcdir=scmsrcdir)
kspath = os.path.join(scmsrcdir, ksfile)
else:
kspath = self.localPath("work/%s" % ksfile)
@ -3269,13 +3269,13 @@ class OzImageTask(BaseTaskHandler):
if self.opts.get('ksurl'):
scm = SCM(self.opts['ksurl'])
scm.assert_allowed(self.options.allowed_scms)
self.run_plugin('preSCMCheckout', scminfo=scm.contextData())
logfile = os.path.join(self.workdir, 'checkout-%s.log' % self.arch)
self.run_plugin('preSCMCheckout', scminfo=scm.get_info())
scmsrcdir = scm.checkout(self.workdir, self.session,
self.getUploadDir(), logfile)
self.run_plugin("postSCMCheckout",
scminfo=scm.contextData(),
extra_keys={"sourcedir": scmsrcdir})
scminfo=scm.get_info(),
srcdir=scmsrcdir)
kspath = os.path.join(scmsrcdir, os.path.basename(ksfile))
else:
tops = dict([(k, getattr(self.options, k)) for k in 'topurl','topdir'])
@ -4080,13 +4080,13 @@ class BuildIndirectionImageTask(OzImageTask):
if fileurl:
scm = SCM(fileurl)
scm.assert_allowed(self.options.allowed_scms)
self.run_plugin('preSCMCheckout', scminfo=scm.contextData())
self.run_plugin('preSCMCheckout', scminfo=scm.get_info())
logfile = os.path.join(self.workdir, 'checkout.log')
scmsrcdir = scm.checkout(self.workdir, self.session,
self.getUploadDir(), logfile)
self.run_plugin("postSCMCheckout",
scminfo=scm.contextData(),
extra_keys={"sourcedir": scmsrcdir})
scminfo=scm.get_info(),
srcdir=scmsrcdir)
final_path = os.path.join(scmsrcdir, os.path.basename(filepath))
else:
tops = dict([(k, getattr(self.options, k)) for k in 'topurl','topdir'])
@ -4396,7 +4396,6 @@ class BuildSRPMFromSCMTask(BaseBuildTask):
# will throw a BuildError if the url is invalid
scm = SCM(url)
scm.assert_allowed(self.options.allowed_scms)
self.run_plugin('preSCMCheckout', scminfo=scm.contextData())
if opts is None:
opts = {}
@ -4428,11 +4427,12 @@ class BuildSRPMFromSCMTask(BaseBuildTask):
logfile = self.workdir + '/checkout.log'
uploadpath = self.getUploadDir()
self.run_plugin('preSCMCheckout', scminfo=scm.get_info())
# Check out spec file, etc. from SCM
sourcedir = scm.checkout(scmdir, self.session, uploadpath, logfile)
self.run_plugin("postSCMCheckout",
scminfo=scm.contextData(),
extra_keys={"sourcedir": sourcedir})
scminfo=scm.get_info(),
srcdir=sourcedir)
# chown the sourcedir and everything under it to the mockuser
# so we can build the srpm as non-root
uid = pwd.getpwnam(self.options.mockuser)[2]

View file

@ -229,7 +229,7 @@ class SCM(object):
# should never happen
raise koji.GenericError('Invalid SCM URL: %s' % url)
def contextData(self, keys=None):
def get_info(self, keys=None):
if keys is None:
keys = ["url", "scheme", "user", "host", "path", "query", "revision", "scmtype"]
return dict([(k, vars(self)[k]) for k in keys if vars(self).has_key(k)])

View file

@ -383,44 +383,16 @@ class BaseTaskHandler(object):
repo_info = self.wait(task_id)[task_id]
return repo_info
@classmethod
def request_keys(cls, method_name='handler', filter=None):
try:
keys = cls.requestKeys
except AttributeError:
pass
else:
return keys
if filter is None:
filter = (lambda name, obj:
inspect.ismethod(obj) and name == method_name)
methods = [(name, obj) for name, obj in inspect.getmembers(cls)
if filter(name, obj)]
_, method = methods[0]
keys, args, kwargs, default_vals = tuple(inspect.getargspec(method))
keys = keys + [item for item in args, kwargs if item is not None]
return keys[1:]
def parsed_request(self, request=None, keys=None):
if request is None:
request = self.session.getTaskRequest(self.id)
if keys is None:
keys = self.request_keys()
return zip(keys, request)
def contextData(self):
taskinfo = self.session.getTaskInfo(self.id, request=True)
request = self.parsed_request(taskinfo['request'])
return taskinfo.update(request)
def run_plugin(self, plugin, scminfo=None, extra_keys=None):
taskinfo = self.contextData()
if extra_keys:
scminfo.update(extra_keys)
koji.plugin.run_callbacks(plugin, taskinfo=taskinfo, scminfo=scminfo)
def run_plugin(self, plugin, *args, **kwargs):
if 'taskinfo' not in kwargs:
try:
taskinfo = self.taskinfo
except AttributeError:
self.taskinfo = self.session.getTaskInfo(self.id, request=True)
taskinfo = self.taskinfo
kwargs['taskinfo'] = taskinfo
koji.plugin.run_callbacks(plugin, *args, **kwargs)
class FakeTask(BaseTaskHandler):

View file

@ -67,7 +67,7 @@ class WindowsBuild(object):
"""Get task info and setup build directory"""
self.logger = logging.getLogger('koji.vm')
self.server = server
info = server.getTaskInfo()
self.taskinfo = server.getTaskInfo()
self.source_url = info[0]
self.build_tag = info[1]
if len(info) > 2:
@ -166,17 +166,29 @@ class WindowsBuild(object):
def checkout(self):
"""Checkout sources, winspec, and patches, and apply patches"""
src_scm = SCM(self.source_url)
koji.plugin.run_callbacks('preSCMCheckout', taskinfo=self.taskinfo, scminfo=src_scm.get_info())
self.source_dir = src_scm.checkout(ensuredir(os.path.join(self.workdir, 'source')))
koji.plugin.run_callbacks('postSCMCheckout', taskinfo=self.taskinfo,
scminfo=src_scm.get_info(),
srcdir=self.source_dir)
self.zipDir(self.source_dir, os.path.join(self.workdir, 'sources.zip'))
if 'winspec' in self.task_opts:
spec_scm = SCM(self.task_opts['winspec'])
koji.plugin.run_callbacks('preSCMCheckout', taskinfo=self.taskinfo, scminfo=spec_scm.get_info())
self.spec_dir = spec_scm.checkout(ensuredir(os.path.join(self.workdir, 'spec')))
koji.plugin.run_callbacks('postSCMCheckout', taskinfo=self.taskinfo,
scminfo=spec_scm.get_info(),
srcdir=self.spec_dir)
self.zipDir(self.spec_dir, os.path.join(self.workdir, 'spec.zip'))
else:
self.spec_dir = self.source_dir
if 'patches' in self.task_opts:
patch_scm = SCM(self.task_opts['patches'])
koji.plugin.run_callbacks('preSCMCheckout', taskinfo=self.taskinfo, scminfo=patch_scm.get_info())
self.patches_dir = patch_scm.checkout(ensuredir(os.path.join(self.workdir, 'patches')))
koji.plugin.run_callbacks('postSCMCheckout', taskinfo=self.taskinfo,
scminfo=patch_scm.get_info(),
srcdir=self.patch_dir)
self.zipDir(self.patches_dir, os.path.join(self.workdir, 'patches.zip'))
self.applyPatches(self.source_dir, self.patches_dir)
self.virusCheck(self.workdir)

View file

@ -305,8 +305,6 @@ class WinBuildTask(MultiPlatformTask):
for url in [source_url] + subopts.values():
scm = SCM(url)
scm.assert_allowed(self.options.allowed_scms)
self.run_plugin('preSCMCheckout', scminfo=scm.contextData())
task_info = self.session.getTaskInfo(self.id)
target_info = self.session.getBuildTarget(target)
if not target_info: