From 89e82d602095fe84357f89149aa668fb02ec1843 Mon Sep 17 00:00:00 2001 From: Yuming Zhu Date: Jun 20 2017 13:32:19 +0000 Subject: only path taskinfo, scminfo, [srcdir] to plugin --- diff --git a/builder/kojid b/builder/kojid index 0820f05..43fd1d9 100755 --- a/builder/kojid +++ b/builder/kojid @@ -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] diff --git a/koji/daemon.py b/koji/daemon.py index 9e12b3e..8b72e5b 100644 --- a/koji/daemon.py +++ b/koji/daemon.py @@ -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)]) diff --git a/koji/tasks.py b/koji/tasks.py index 45d2fdc..2c5fed2 100644 --- a/koji/tasks.py +++ b/koji/tasks.py @@ -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): diff --git a/vm/kojikamid.py b/vm/kojikamid.py index 0499c74..9249e1e 100755 --- a/vm/kojikamid.py +++ b/vm/kojikamid.py @@ -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) diff --git a/vm/kojivmd b/vm/kojivmd index cbabac9..75e3eb9 100755 --- a/vm/kojivmd +++ b/vm/kojivmd @@ -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: