diff options
Diffstat (limited to 'ybd/rpm.py')
-rw-r--r-- | ybd/rpm.py | 41 |
1 files changed, 13 insertions, 28 deletions
@@ -15,6 +15,7 @@ import repos import requests import tempfile import utils +import subprocess # Because rpm is otherwise totally broken @@ -498,34 +499,19 @@ def package_one_rpm(dn, userdata): return True -def rpm_deployment_filename(system, dn, rpmpath): +def rpm_deployment_filename(dn, rpmpath): # Reads rpm's headers to construct its filename. - # It copies the rpm into the sandbox, because the artifact is - # outside the sandbox. - filename = os.path.basename(rpmpath) - sandbox_dstdir = os.path.join(system['sandbox'], 'tmp') - sandbox_dstfile = os.path.join(sandbox_dstdir, filename) - sandbox_real_rpmpath = os.path.join(sandbox_dstdir, filename) - sandbox_rpmpath = os.path.join('/tmp', filename) - if not os.path.exists(sandbox_dstdir): - os.makedirs(sandbox_dstdir) - shutil.copyfile(rpmpath, sandbox_dstfile) - - env_vars = sandbox.env_vars_for_build(system) - command = ( - 'rpm {} {} -q -p {} ' - '--queryformat="%{{name}}-%{{version}}-%{{release}}.%{{arch}}.rpm"' - .format(common_rpm_args, extract_defines(dn), sandbox_rpmpath)) - ret, out, err = sandbox.run_sandboxed(system, command, - env_vars, exit_on_error=False, - run_logged=False, - print_command=False) - os.remove(sandbox_real_rpmpath) - if not ret: - app.log("ERROR: Failed to generate rpm name, {}".format(err)) + out = "" + qf = '--queryformat="%{name}-%{version}-%{release}.%{arch}.rpm' + try: + with open(os.devnull, 'w') as fnull: + out = subprocess.check_output(['rpm', '-q', '-p', rpmpath, qf], + stderr=fnull) + except subprocess.CalledProcessError: + app.log(dn, "ERROR: Failed to generate rpm name") sys.exit(1) - if out is None: - app.log(dn, "ERROR: getting rpm deployment filename returned None") + if not out: + app.log(dn, "ERROR: getting rpm deployment filename returned empty") sys.exit(1) return out @@ -543,8 +529,7 @@ def deploy_rpm(dn, userdata): return False dstdir = os.path.join(app.config['deployment'], 'RPMs', cache_key(userdata['system'])) - dstfilename = rpm_deployment_filename(userdata['system'], - dn, cached_path) + dstfilename = rpm_deployment_filename(dn, cached_path) dstpath = os.path.join(dstdir, dstfilename) if not os.path.exists(dstdir): os.makedirs(dstdir) |