deb-mock/mock/py/mockbuild/rebuild.py
robojerk 4c0dcb2522
Some checks failed
Build Deb-Mock Package / build (push) Successful in 54s
Lint Code / Lint All Code (push) Failing after 1s
Test Deb-Mock Build / test (push) Failing after 36s
enhance: Add comprehensive .gitignore for deb-mock project
- Add mock-specific build artifacts (chroot/, mock-*, mockroot/)
- Include package build files (*.deb, *.changes, *.buildinfo)
- Add development tools (.coverage, .pytest_cache, .tox)
- Include system files (.DS_Store, Thumbs.db, ._*)
- Add temporary and backup files (*.tmp, *.bak, *.backup)
- Include local configuration overrides (config.local.yaml, .env.local)
- Add test artifacts and documentation builds
- Comprehensive coverage for Python build system project

This ensures build artifacts, chroot environments, and development
tools are properly ignored in version control.
2025-08-18 23:37:49 -07:00

105 lines
4 KiB
Python

# -*- coding: utf-8 -*-
# vim:expandtab:autoindent:tabstop=4:shiftwidth=4:filetype=python:textwidth=0:
# License: GPL2 or later see COPYING
import logging
import os.path
import sys
import time
from . import util
from .exception import BadCmdline
from .trace_decorator import traceLog
log = logging.getLogger()
@traceLog()
def rebuild_generic(items, commands, buildroot, config_opts, cmd, post=None, clean=True):
start = time.time()
try:
for item in items:
log.info("Start(%s) Config(%s)", item, buildroot.shared_root_name)
if clean:
commands.clean()
commands.init(prebuild=not config_opts.get('short_circuit'))
ret = cmd(item)
elapsed = time.time() - start
log.info("Done(%s) Config(%s) %d minutes %d seconds",
item, config_opts['chroot_name'], elapsed // 60, elapsed % 60)
log.info("Results and/or logs in: %s", buildroot.resultdir)
commands.plugins.call_hooks("process_logs")
if config_opts["cleanup_on_success"]:
log.info("Cleaning up build root ('cleanup_on_success=True')")
commands.clean()
if post:
post()
return ret
except (Exception, KeyboardInterrupt):
elapsed = time.time() - start
log.error("Exception(%s) Config(%s) %d minutes %d seconds",
item, buildroot.shared_root_name, elapsed // 60, elapsed % 60)
log.info("Results and/or logs in: %s", buildroot.resultdir)
commands.plugins.call_hooks("process_logs")
if config_opts["cleanup_on_failure"]:
log.info("Cleaning up build root ('cleanup_on_failure=True')")
commands.clean()
raise
@traceLog()
def do_rebuild(config_opts, commands, buildroot, options, srpms):
"rebuilds a list of srpms using provided chroot"
if len(srpms) < 1:
log.critical("No package specified to rebuild command.")
sys.exit(50)
if len(srpms) > 1 and options.spec:
log.critical("--spec argument only supported with single srpm.")
sys.exit(50)
util.checkSrpmHeaders(srpms)
clean = config_opts['clean'] and not config_opts['scm']
def build(srpm):
commands.build(srpm, timeout=config_opts['rpmbuild_timeout'],
check=config_opts['check'], spec=options.spec)
def post_build():
if config_opts['post_install']:
if buildroot.chroot_was_initialized:
commands.install_build_results(commands.build_results)
else:
commands.init()
commands.install_build_results(commands.build_results)
if config_opts["cleanup_on_success"]:
log.info("Cleaning up build root ('cleanup_on_success=True')")
commands.clean()
if config_opts["createrepo_on_rpms"]:
log.info("Running createrepo on binary rpms in resultdir")
with buildroot.uid_manager:
util.createrepo(config_opts, buildroot.resultdir)
rebuild_generic(srpms, commands, buildroot, config_opts, cmd=build,
post=post_build, clean=clean)
# pylint: disable=unused-argument
@traceLog()
def do_buildsrpm(config_opts, commands, buildroot, options, args):
# verify the input command line arguments actually exist
if not os.path.isfile(options.spec):
raise BadCmdline("Input specfile does not exist: %s" % options.spec)
if options.sources and not os.path.isdir(options.sources) and not os.path.isfile(options.sources):
raise BadCmdline("Input sources directory or file does not exist: %s" % options.sources)
clean = config_opts['clean']
def cmd(spec):
return commands.buildsrpm(spec=spec, sources=options.sources,
timeout=config_opts['rpmbuild_timeout'],
follow_links=options.symlink_dereference)
return rebuild_generic([options.spec], commands, buildroot, config_opts,
cmd=cmd, post=None, clean=clean)