deb-mock/mock/py/mockbuild/plugins/package_state.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

82 lines
3.3 KiB
Python

# -*- coding: utf-8 -*-
# vim:expandtab:autoindent:tabstop=4:shiftwidth=4:filetype=python:textwidth=0:
# License: GPL2 or later see COPYING
# Written by Seth Vidal
# Copyright (C) 2012 Red Hat, Inc
# this plugin dumps out two lists of pkgs:
# A list of all available pkgs + repos + other data
# A list of all installed pkgs + repos + other data
# into the results dir
# two files - available_pkgs.log
# installed_pkgs.log
# our imports
from mockbuild.trace_decorator import traceLog
import mockbuild.util
# repoquery used
repoquery_avail_opts = \
"--qf '%{name}-%{epoch}:%{version}-%{release}.%{arch} %{buildtime} %{size} %{pkgid} %{repoid}' '*'"
# set up logging, module options
requires_api_version = "1.1"
# plugin entry point
@traceLog()
def init(plugins, conf, buildroot):
PackageState(plugins, conf, buildroot)
class PackageState(object):
"""dumps out a list of packages available and in the chroot"""
# pylint: disable=too-few-public-methods
@traceLog()
def __init__(self, plugins, conf, buildroot):
self.buildroot = buildroot
self.state = buildroot.state
self.conf = conf
self.available_pkgs_enabled = self.conf['available_pkgs']
self.installed_pkgs_enabled = self.conf['installed_pkgs']
self.avail_done = False
self.inst_done = False
self.online = self.buildroot.config['online']
plugins.add_hook("postyum", self._availablePostYumHook)
plugins.add_hook("postdeps", self._installedPreBuildHook)
@traceLog()
def _availablePostYumHook(self):
if self.online and not self.avail_done and self.available_pkgs_enabled:
with self.buildroot.uid_manager:
self.state.start("Outputting list of available packages")
out_file = self.buildroot.resultdir + '/available_pkgs.log'
chrootpath = self.buildroot.make_chroot_path()
if self.buildroot.config['package_manager'] in ['dnf', 'microdnf']:
cmd = "/usr/bin/dnf --installroot={0} repoquery -c {0}/etc/dnf/dnf.conf {1} | sort > {2}".format(
chrootpath, repoquery_avail_opts, out_file)
else:
cmd = "/usr/bin/repoquery --installroot={0} -c {0}/etc/yum.conf {1} | sort > {2}".format(
chrootpath, repoquery_avail_opts, out_file)
mockbuild.util.do(cmd, shell=True, env=self.buildroot.env)
self.avail_done = True
self.state.finish("Outputting list of available packages")
@traceLog()
def _installedPreBuildHook(self):
if self.inst_done or not self.installed_pkgs_enabled:
return
out_file = self.buildroot.resultdir + '/installed_pkgs.log'
self.state.start("Outputting list of installed packages")
try:
cmd = "rpm -qa --root '%s' --qf '%%{nevra} %%{buildtime} %%{size} %%{pkgid} installed\\n'" % (
self.buildroot.make_chroot_path())
with self.buildroot.uid_manager:
output, _ = self.buildroot.doOutChroot(cmd, returnOutput=1, shell=True)
with open(out_file, 'w') as out_fd:
out_fd.write(output)
finally:
self.inst_done = True
self.state.finish("Outputting list of installed packages")