From c97728cbe3168d22cdf7997cd24c9f89ae754b42 Mon Sep 17 00:00:00 2001 From: Tomas Kopecek Date: Dec 06 2017 13:45:58 +0000 Subject: [PATCH 1/4] 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): From 176a313c0f18c99f00c705f257fc6d52f2cbe98a Mon Sep 17 00:00:00 2001 From: Tomas Kopecek Date: Dec 06 2017 13:45:58 +0000 Subject: [PATCH 2/4] fix race condition and missing values --- diff --git a/builder/kojid b/builder/kojid index 0953dbf..4f60a8d 100755 --- a/builder/kojid +++ b/builder/kojid @@ -868,7 +868,7 @@ 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'): + if getattr(self, 'source', False): data['source'] = self.source['source'] data['extra'] = {'url': self.source['url']} @@ -4564,13 +4564,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': scm.get_source(), + 'source': source, } class TagNotificationTask(BaseTaskHandler): From edec6d4a0975dea536d26431364d6e7994962772 Mon Sep 17 00:00:00 2001 From: Tomas Kopecek Date: Dec 06 2017 13:45:58 +0000 Subject: [PATCH 3/4] store source also for CVS/SVN --- diff --git a/koji/daemon.py b/koji/daemon.py index 1153b16..c058624 100644 --- a/koji/daemon.py +++ b/koji/daemon.py @@ -511,21 +511,23 @@ class SCM(object): 'url': self.url, 'source': '', } - if self.scmtype.startswith('GIT'): + if self.scmtype.startswith('CVS') or self.scmtype.startswith('SVN'): + scheme = self.scheme[:-3] + netloc = self.host + path = self.repository + query = self.module + fragment = self.revision + elif 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 + netloc = self.host path = self.repository query = self.module r['source'] = urlparse.urlunsplit([scheme, netloc, path, query, fragment]) return r - class TaskManager(object): def __init__(self, options, session): From fbe5991834863b5d0a2296af657393d185a3830f Mon Sep 17 00:00:00 2001 From: Tomas Kopecek Date: Dec 06 2017 13:45:58 +0000 Subject: [PATCH 4/4] store original url for non-git scms --- diff --git a/builder/kojid b/builder/kojid index 4f60a8d..bc30632 100755 --- a/builder/kojid +++ b/builder/kojid @@ -870,7 +870,7 @@ class BuildTask(BaseTaskHandler): data['task_id'] = self.id if getattr(self, 'source', False): data['source'] = self.source['source'] - data['extra'] = {'url': self.source['url']} + data['extra'] = { 'source': {'url': self.source['url']}} extra_arches = None self.logger.info("Reading package config for %(name)s" % data) diff --git a/koji/daemon.py b/koji/daemon.py index c058624..2290b4f 100644 --- a/koji/daemon.py +++ b/koji/daemon.py @@ -509,22 +509,15 @@ class SCM(object): def get_source(self): r = { 'url': self.url, - 'source': '', + 'source': self.url, } - if self.scmtype.startswith('CVS') or self.scmtype.startswith('SVN'): - scheme = self.scheme[:-3] - netloc = self.host - path = self.repository - query = self.module - fragment = self.revision - elif self.scmtype.startswith('GIT'): + 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]) + commit = subprocess.check_output(cmd, cwd=self.sourcedir).strip() + if '#' in self.url: + r['source'] = '%s#%s' % (self.url[self.url.find('#')], commit) + else: + r['source'] = '%s#%s' % (self.url, commit) return r