From cedd6eef7f67774386668e27c795d94a69eee2ce Mon Sep 17 00:00:00 2001 From: Mike McLean Date: Dec 11 2017 17:50:49 +0000 Subject: PR#674: store git commit hash to build.source Merges #674 https://pagure.io/koji/pull-request/674 Fixes: #550 https://pagure.io/koji/issue/550 Have koji store the git hash --- diff --git a/builder/kojid b/builder/kojid index e5f7196..a71de54 100755 --- a/builder/kojid +++ b/builder/kojid @@ -868,6 +868,10 @@ class BuildTask(BaseTaskHandler): h = self.readSRPMHeader(srpm) data = koji.get_header_fields(h,['name','version','release','epoch']) data['task_id'] = self.id + if getattr(self, 'source', False): + data['source'] = self.source['source'] + data['extra'] = {'source': {'original_url': self.source['url']}} + extra_arches = None self.logger.info("Reading package config for %(name)s" % data) pkg_cfg = self.session.getPackageConfig(dest_tag,data['name'],event=self.event_id) @@ -933,6 +937,10 @@ class BuildTask(BaseTaskHandler): parent=self.id) # wait for subtask to finish result = self.wait(task_id)[task_id] + if 'source' in result: + self.source = result['source'] + else: + self.logger.warning('subtask did not provide source data') srpm = result['srpm'] return srpm @@ -4559,12 +4567,14 @@ class BuildSRPMFromSCMTask(BaseBuildTask): brootid = broot.id log_files = glob.glob('%s/*.log' % broot.resultdir()) + source = scm.get_source() broot.expire() return {'srpm': "%s/%s" % (uploadpath, srpm_name), 'logs': ["%s/%s" % (uploadpath, os.path.basename(f)) for f in log_files], 'brootid': brootid, + 'source': source, } class TagNotificationTask(BaseTaskHandler): diff --git a/koji/daemon.py b/koji/daemon.py index f279a67..4e6a974 100644 --- a/koji/daemon.py +++ b/koji/daemon.py @@ -32,6 +32,7 @@ import urlparse from fnmatch import fnmatch import base64 import time +import subprocess import sys import traceback import errno @@ -501,8 +502,26 @@ class SCM(object): rel_path = '../' * len(path_comps.split('/')) os.symlink(rel_path + 'common', '%s/../common' % sourcedir) + self.sourcedir = sourcedir return sourcedir + def get_source(self): + r = { + 'url': self.url, + 'source': '', + } + if self.scmtype.startswith('GIT'): + cmd = ['git', 'rev-parse', 'HEAD'] + fragment = subprocess.check_output(cmd, cwd=self.sourcedir).strip() + scheme = self.scheme[:-3] + netloc = self.host + path = self.repository + query = self.module + r['source'] = urlparse.urlunsplit([scheme, netloc, path, query, fragment]) + else: + # just use the same url + r['source'] = self.url + return r ## END kojikamid dup