From 4a96ee5474552d41de37ca45e54d0869f366232b Mon Sep 17 00:00:00 2001 From: Tomas Kopecek Date: Dec 11 2017 17:50:46 +0000 Subject: store git commit hash to build.source Git HEAD commit hash is now stored in build.info field. this field is currently used by content generators, but not by other builds. Also original checked out url is stored in build.extra.url field. Fixes: https://pagure.io/koji/issue/550 --- diff --git a/builder/kojid b/builder/kojid index e5f7196..0953dbf 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'): + data['source'] = self.source['source'] + data['extra'] = {'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,7 @@ class BuildTask(BaseTaskHandler): parent=self.id) # wait for subtask to finish result = self.wait(task_id)[task_id] + self.source = result['source'] srpm = result['srpm'] return srpm @@ -4565,6 +4570,7 @@ class BuildSRPMFromSCMTask(BaseBuildTask): 'logs': ["%s/%s" % (uploadpath, os.path.basename(f)) for f in log_files], 'brootid': brootid, + 'source': scm.get_source(), } class TagNotificationTask(BaseTaskHandler): diff --git a/koji/daemon.py b/koji/daemon.py index f279a67..1153b16 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,9 +502,28 @@ class SCM(object): rel_path = '../' * len(path_comps.split('/')) os.symlink(rel_path + 'common', '%s/../common' % sourcedir) + self.sourcedir = sourcedir return sourcedir ## END kojikamid dup + 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] + if self.user: + netloc = '%s@%s' % (self.user, self.host) + else: + netloc = self.host + path = self.repository + query = self.module + r['source'] = urlparse.urlunsplit([scheme, netloc, path, query, fragment]) + return r + class TaskManager(object):