mbs-build now builds modules only from yaml files

This commit is contained in:
Martin Curlej
2017-11-07 21:24:29 +01:00
committed by Ralph Bean
parent 11a51a0404
commit c76c5dcf15
5 changed files with 12 additions and 63 deletions

View File

@@ -60,9 +60,7 @@ def init_config(app):
# Load LocalBuildConfiguration section in case we are building modules
# locally.
local_build_cmds = ["build_module_locally", "build_module_locally_from_file"]
local = [cmd for cmd in sys.argv if cmd in local_build_cmds]
if local:
if "build_module_locally" in sys.argv:
config_section = "LocalBuildConfiguration"
# try getting config_file from os.environ

View File

@@ -86,18 +86,8 @@ class SCM(object):
self.name = self.name[:-4]
self.commit = match.group("commit")
self.branch = branch if branch else "master"
self.latest = False
# if not stated otherwise the default behaviour is that we work with
# non-local bare repositories
self.local = False
self.bare_repo = True
if self.repository.startswith("file://") and allow_local:
self.local = True
abs_repo_path = self.repository[7:]
self.bare_repo = self._is_bare_repo(abs_repo_path)
if not self.commit:
self.commit = self.get_latest(self.branch)
self.latest = True
self.version = None
else:
raise ValidationError("Unhandled SCM scheme: %s" % self.scheme)
@@ -180,11 +170,7 @@ class SCM(object):
"within the repository. Perhaps you forgot to push. "
"The original message was: %s" % e.message)
raise
# will patch the temp git repo with uncommited changes only if there
# is no commit repo present in repo definition and its a local dir
# and not a bare repo.
if self.latest and self.local and not self.bare_repo:
self.patch_with_uncommited_changes(self.sourcedir)
timestamp = SCM._run(["git", "show", "-s", "--format=%ct"], chdir=self.sourcedir)[1]
dt = datetime.datetime.utcfromtimestamp(int(timestamp))
self.version = dt.strftime("%Y%m%d%H%M%S")
@@ -211,12 +197,6 @@ class SCM(object):
else:
raise RuntimeError("get_latest: Unhandled SCM scheme.")
def _is_bare_repo(self, repo_path):
""" Checks if the repository is a bare repo """
is_bare_repo_cmd = ["git", "config", "core.bare"]
_, is_bare, _ = SCM._run(is_bare_repo_cmd, chdir=repo_path)
return is_bare.rstrip() == "true"
def get_full_commit_hash(self, commit_hash=None):
"""
Takes a shortened commit hash and returns the full hash
@@ -273,30 +253,6 @@ class SCM(object):
"Couldn't access: %s" % path_to_yaml)
raise UnprocessableEntity("The SCM repository doesn't contain a modulemd file")
def patch_with_uncommited_changes(self, source_dir):
"""
This method patches the given tmp git repository with uncommented changes from its
origin git dir. Creates a patch file which holds the result for `git diff` command
executed in the origin repo.
source_dir (str): path to the temp git repo
"""
module_diff = ['git', 'diff']
# stripping the 'file:// from self.repository'
_, diff, _ = SCM._run(module_diff, chdir=self.repository[7:])
if diff:
try:
log.debug("Working with local, non-bare repository. Applying uncommited changes.")
patch_file = os.path.join(source_dir, "patch")
with open(patch_file, "w") as fd:
fd.write(diff)
module_patch = ['git', 'apply', 'patch']
SCM._run(module_patch, chdir=source_dir)
except Exception:
log.exception("Failed to update repo %s with uncommited changes."
% source_dir)
raise
@staticmethod
def is_full_commit_hash(scheme, commit):
"""

View File

@@ -907,7 +907,7 @@ def record_component_builds(mmd, module, initial_batch=1,
return batch
def submit_module_build_from_yaml(username, handle, stream=None, **kwargs):
def submit_module_build_from_yaml(username, handle, stream=None, optional_params=None):
yaml = handle.read()
mmd = load_mmd(yaml)
@@ -923,14 +923,14 @@ def submit_module_build_from_yaml(username, handle, stream=None, **kwargs):
mmd.stream = mmd.stream or stream or "master"
mmd.version = mmd.version or def_version
return submit_module_build(username, None, mmd, None, yaml, **kwargs)
return submit_module_build(username, None, mmd, None, yaml, optional_params)
_url_check_re = re.compile(r"^[^:/]+:.*$")
def submit_module_build_from_scm(username, url, branch, allow_local_url=False,
skiptests=False, **kwargs):
skiptests=False, optional_params=None):
# Translate local paths into file:// URL
if allow_local_url and not _url_check_re.match(url):
log.info(
@@ -940,14 +940,12 @@ def submit_module_build_from_scm(username, url, branch, allow_local_url=False,
mmd, scm = _fetch_mmd(url, branch, allow_local_url)
if skiptests:
mmd.buildopts.rpms.macros += "\n\n%__spec_check_pre exit 0\n"
return submit_module_build(username, url, mmd, scm, yaml, **kwargs)
return submit_module_build(username, url, mmd, scm, yaml, optional_params)
def submit_module_build(username, url, mmd, scm, optional_params=None):
def submit_module_build(username, url, mmd, scm, yaml, optional_params=None):
import koji # Placed here to avoid py2/py3 conflicts...
def submit_module_build(username, url, mmd, scm, yaml, **kwargs):
# Import it here, because SCM uses utils methods
# and fails to import them because of dep-chain.
validate_mmd(mmd)
@@ -992,7 +990,7 @@ def submit_module_build(username, url, mmd, scm, yaml, **kwargs):
modulemd=mmd.dumps(),
scmurl=url,
username=username,
**(kwargs or {})
**(optional_params or {})
)
db.session.add(module)

View File

@@ -317,7 +317,8 @@ class SCMHandler(BaseHandler):
branch = branch.encode('utf-8')
return submit_module_build_from_scm(self.username, url, branch,
allow_local_url=False, **self.optional_params)
allow_local_url=False,
optional_params=self.optional_params)
class YAMLFileHandler(BaseHandler):
@@ -335,7 +336,8 @@ class YAMLFileHandler(BaseHandler):
def post(self):
handle = request.files["yaml"]
return submit_module_build_from_yaml(self.username, handle, **self.optional_params)
return submit_module_build_from_yaml(self.username, handle,
optional_params=self.optional_params)
def register_api_v1():

View File

@@ -115,8 +115,3 @@ class TestSCMModule(unittest.TestCase):
scm.checkout(self.tempdir)
scm.verify()
scm.get_module_yaml()
@raises(UnprocessableEntity)
def test_get_latest_incorect_component_branch(self):
scm = module_build_service.scm.SCM(repo_path)
scm.get_latest(branch='foobar')