From 30bf2645e1b0a9e8f74290cd85bdc5dad10ac596 Mon Sep 17 00:00:00 2001 From: Ondřej Nosek Date: May 11 2020 22:54:26 +0000 Subject: Merge branch 'master' into epel8-playground --- diff --git a/.gitignore b/.gitignore index 50128a5..0071ae2 100644 --- a/.gitignore +++ b/.gitignore @@ -54,3 +54,5 @@ /rpkg-1.56.tar.gz /rpkg-1.57.tar.gz /rpkg-1.58.tar.gz +/rpkg-1.59.tar.gz +/rpkg-1.60.tar.gz diff --git a/0001-Fix-clone-branches.patch b/0001-Fix-clone-branches.patch deleted file mode 100644 index 1536310..0000000 --- a/0001-Fix-clone-branches.patch +++ /dev/null @@ -1,44 +0,0 @@ -From c194bf503ffd176403708345a230501b634aa373 Mon Sep 17 00:00:00 2001 -From: Todd Zullinger -Date: Tue, 7 May 2019 21:40:31 -0400 -Subject: [PATCH] Fix clone --branches - -When cloning with the --branches option we first clone a bare repo -locally, then clone each branch from that bare repo. Avoid adding an -excludes file to the temporary bare repo (which fails because we pass -the wrong path to the git dir). Add an excludes file to each branch -dir. - -Resolves: rhbz#1707223 -Signed-off-by: Todd Zullinger ---- - pyrpkg/__init__.py | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py -index c12b52b..43bfc1d 100644 ---- a/pyrpkg/__init__.py -+++ b/pyrpkg/__init__.py -@@ -1546,7 +1546,8 @@ class Commands(object): - conf_git = git.Git(os.path.join(path, git_dir)) - self._clone_config(conf_git, repo) - -- self._add_git_excludes(os.path.join(path, git_dir)) -+ if not bare_dir: -+ self._add_git_excludes(os.path.join(path, git_dir)) - - return - -@@ -1625,6 +1626,9 @@ class Commands(object): - branch_git.config("--replace-all", - "remote.%s.url" % self.default_branch_remote, - giturl) -+ -+ # Add excludes -+ self._add_git_excludes(branch_path) - except (git.GitCommandError, OSError) as e: - raise rpkgError('Could not locally clone %s from %s: %s' - % (branch, repo_path, e)) --- -2.20.1 - diff --git a/0001-Repair-downloading-sources-into-external-directory.patch b/0001-Repair-downloading-sources-into-external-directory.patch new file mode 100644 index 0000000..c1b1511 --- /dev/null +++ b/0001-Repair-downloading-sources-into-external-directory.patch @@ -0,0 +1,31 @@ +From ae1135dfbca05ddcd88bbcc962baf589dba143e1 Mon Sep 17 00:00:00 2001 +From: Ondrej Nosek +Date: Tue, 24 Mar 2020 01:23:53 +0100 +Subject: [PATCH] Repair downloading sources into external directory + +Signed-off-by: Ondrej Nosek +--- + pyrpkg/utils.py | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/pyrpkg/utils.py b/pyrpkg/utils.py +index e6339db..d1b79b9 100644 +--- a/pyrpkg/utils.py ++++ b/pyrpkg/utils.py +@@ -185,8 +185,11 @@ def is_file_tracked(file_path, repo_path): + # create a repo object from our path + try: + repo = git.Repo(repo_path) +- except (git.InvalidGitRepositoryError, git.NoSuchPathError): +- raise RuntimeError("%s is not a valid repo" % repo_path) ++ except git.InvalidGitRepositoryError: ++ # repo_path is not a valid repo - input file is not tracked ++ return False ++ except git.NoSuchPathError: ++ raise RuntimeError("%s is not a valid path" % repo_path) + + if relative_file_path in repo.untracked_files: + return False +-- +2.21.1 + diff --git a/0002-Custom-handler-for-koji-watch_tasks.patch b/0002-Custom-handler-for-koji-watch_tasks.patch deleted file mode 100644 index 9e4c2d2..0000000 --- a/0002-Custom-handler-for-koji-watch_tasks.patch +++ /dev/null @@ -1,121 +0,0 @@ -From 910ed50456ea41995989d59a5a469799ba8d4e5b Mon Sep 17 00:00:00 2001 -From: Ondrej Nosek -Date: Wed, 15 May 2019 18:53:30 +0200 -Subject: [PATCH] Custom handler for koji watch_tasks - -Output text during rhpkg/fedpkg build process states that there -is a 'watch_task' subcommand. When 'koji_cli' library is imported -in rhpkg/fedpkg tool, it shows that command is named -'rhpkg/fedpkg watch_task' instead of 'brew/koji watch_task'. Custom -handler replaces the internal one inside koji_cli library. -Additional fix in rhpkg is needed after this change is released. - -Relates: rhbz#1570921 -Relates: COMPOSE-2809 - -Signed-off-by: Ondrej Nosek ---- - pyrpkg/cli.py | 6 +++++- - pyrpkg/utils.py | 21 +++++++++++++++++++++ - tests/test_cli.py | 39 ++++++++++++++++++++++----------------- - 3 files changed, 48 insertions(+), 18 deletions(-) - -diff --git a/pyrpkg/cli.py b/pyrpkg/cli.py -index 7b83a44..72be1cf 100644 ---- a/pyrpkg/cli.py -+++ b/pyrpkg/cli.py -@@ -1667,7 +1667,11 @@ see API KEY section of copr-cli(1) man page. - if self.args.dry_run: - self.log.info('DRY-RUN: Watch tasks: %s', task_ids) - else: -- return koji_cli.lib.watch_tasks(self.cmd.kojisession, task_ids) -+ return koji_cli.lib.watch_tasks( -+ self.cmd.kojisession, -+ task_ids, -+ ki_handler=utils.make_koji_watch_tasks_handler(self.cmd.build_client) -+ ) - - def extract_greenwave_url(self): - greenwave_url = None -diff --git a/pyrpkg/utils.py b/pyrpkg/utils.py -index 2268e6f..37a39e2 100644 ---- a/pyrpkg/utils.py -+++ b/pyrpkg/utils.py -@@ -128,3 +128,24 @@ def validate_module_build_optional(optional_arg): - 'The "{0}" optional argument is reserved to built-in arguments'.format(key)) - - return (key, value) -+ -+ -+def make_koji_watch_tasks_handler(progname): -+ def koji_watch_tasks_handler(_, tasks, quiet): -+ """ -+ Displays information about running tasks and says how to watch them. -+ Unlike the default version at koji library it overrides progname -+ to show brew, koji or other build client. -+ """ -+ if not quiet: -+ tlist = ['%s: %s' % (t.str(), t.display_state(t.info)) -+ for t in tasks.values() if not t.is_done()] -+ print("""Tasks still running. You can continue to watch with the '%s watch-task' command. -+Running Tasks: %s""" % (progname, '\n'.join(tlist))) -+ -+ # Save reference of the handler during first time use. -+ # It guarantees that the same object is always returned (it allows unittest to pass). -+ global handler_reference -+ if 'handler_reference' not in globals(): -+ handler_reference = koji_watch_tasks_handler -+ return handler_reference -diff --git a/tests/test_cli.py b/tests/test_cli.py -index 785e103..b3e0718 100644 ---- a/tests/test_cli.py -+++ b/tests/test_cli.py -@@ -3235,23 +3235,28 @@ class TestBuildPackage(FakeKojiCreds, CliTestCase): - mock_build_api = None - - with patch('koji_cli.lib.watch_tasks') as watch_tasks: -- with patch('sys.argv', new=cli_cmd): -- cli = self.new_cli(cfg=config_file) -- if sub_command == 'build': -- mock_build_api = session.build -- cli.build() -- elif sub_command == 'scratch-build': -- mock_build_api = session.build -- cli.scratch_build() -- elif sub_command == 'chain-build': -- mock_build_api = session.chainBuild -- cli.chainbuild() -- -- if '--nowait' in cli_cmd: -- watch_tasks.assert_not_called() -- else: -- watch_tasks.assert_called_once_with( -- session, [mock_build_api.return_value]) -+ with patch('pyrpkg.utils.make_koji_watch_tasks_handler') as mock_ki: -+ with patch('sys.argv', new=cli_cmd): -+ cli = self.new_cli(cfg=config_file) -+ if sub_command == 'build': -+ mock_build_api = session.build -+ cli.build() -+ elif sub_command == 'scratch-build': -+ mock_build_api = session.build -+ cli.scratch_build() -+ elif sub_command == 'chain-build': -+ mock_build_api = session.chainBuild -+ cli.chainbuild() -+ -+ if '--nowait' in cli_cmd: -+ watch_tasks.assert_not_called() -+ else: -+ watch_tasks.assert_called_once_with( -+ session, -+ [mock_build_api.return_value], -+ ki_handler=mock_ki.return_value -+ ) -+ self.assertEqual(mock_ki.call_args, (("koji",),)) - - mock_build_api.assert_called_once() - --- -2.20.1 - diff --git a/0002-Repair-compatible-formatting-for-Python-2.6.patch b/0002-Repair-compatible-formatting-for-Python-2.6.patch new file mode 100644 index 0000000..9fcc464 --- /dev/null +++ b/0002-Repair-compatible-formatting-for-Python-2.6.patch @@ -0,0 +1,93 @@ +From abe0b0a9b650b1d55c2482d10ad8898f0efc00ea Mon Sep 17 00:00:00 2001 +From: Ondrej Nosek +Date: Tue, 24 Mar 2020 02:05:19 +0100 +Subject: [PATCH] Repair compatible formatting for Python 2.6 + +Signed-off-by: Ondrej Nosek +--- + pyrpkg/__init__.py | 12 ++++++------ + pyrpkg/utils.py | 8 ++++---- + 2 files changed, 10 insertions(+), 10 deletions(-) + +diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py +index 50f3302..791b66b 100644 +--- a/pyrpkg/__init__.py ++++ b/pyrpkg/__init__.py +@@ -1358,14 +1358,14 @@ class Commands(object): + target_dir = tempfile.mkdtemp(suffix="extract-srpm", prefix="rpkg") + try: + try: +- self.log.debug("Extracting srpm '{}', destination '{}'".format( ++ self.log.debug("Extracting srpm '{0}', destination '{1}'".format( + srpm, target_dir + )) + # method 'is_lookaside_eligible_file' will access extracted + # files to detect its encoding (binary or not) + _, _ = extract_srpm(srpm, target_dir) + except Exception as e: +- self.log.error("Extraction of srpm has failed {}".format(e)) ++ self.log.error("Extraction of srpm has failed {0}".format(e)) + raise + + # Cycle through the srpm content and decide where to upload files +@@ -1633,8 +1633,8 @@ class Commands(object): + namespace = repo.split("/")[0] if "/" in repo else "rpms" + # Has current namespace its own clone config? + selected_clone_config = None +- if hasattr(self, "clone_config_{}".format(namespace)): +- selected_clone_config = getattr(self, "clone_config_{}".format(namespace)) ++ if hasattr(self, "clone_config_{0}".format(namespace)): ++ selected_clone_config = getattr(self, "clone_config_{0}".format(namespace)) + + # Valid configuration is non-empty string + if selected_clone_config: +@@ -1875,10 +1875,10 @@ class Commands(object): + os.remove(file) + + try: +- self.log.debug("Extracting srpm '{}'".format(srpm)) ++ self.log.debug("Extracting srpm '{0}'".format(srpm)) + output, err = extract_srpm(srpm) + except Exception as e: +- self.log.error("Extraction of srpm has failed {}".format(e)) ++ self.log.error("Extraction of srpm has failed {0}".format(e)) + raise + if output: + self.log.debug(output) +diff --git a/pyrpkg/utils.py b/pyrpkg/utils.py +index d1b79b9..1a50a3e 100644 +--- a/pyrpkg/utils.py ++++ b/pyrpkg/utils.py +@@ -251,9 +251,9 @@ def extract_srpm(srpm_path, target_dir=None): + directory if not specified + """ + if not os.path.isfile(srpm_path): +- raise IOError("Input file doesn't exist: {}".format(srpm_path)) ++ raise IOError("Input file doesn't exist: {0}".format(srpm_path)) + if target_dir and not os.path.isdir(target_dir): +- raise IOError("Target directory doesn't exist: {}".format(target_dir)) ++ raise IOError("Target directory doesn't exist: {0}".format(target_dir)) + + # rpm2cpio | cpio -iud --quiet + cmd = ['rpm2cpio', srpm_path] +@@ -272,7 +272,7 @@ def is_lookaside_eligible_file(file_name, dir_path=None): + """ + file_path = os.path.join(dir_path or "", file_name) + if not os.path.isfile(file_path): +- raise IOError("Input file doesn't exist: {}".format(file_path)) ++ raise IOError("Input file doesn't exist: {0}".format(file_path)) + + p = subprocess.Popen( + # parameter '-b' causes brief output - without filename in the output +@@ -284,7 +284,7 @@ def is_lookaside_eligible_file(file_name, dir_path=None): + ) + output, errors = p.communicate() + if errors: +- raise RuntimeError("Mime encoding detection of the file '{}' has failed: {}".format( ++ raise RuntimeError("Mime encoding detection of the file '{0}' has failed: {1}".format( + file_path, + errors + )) +-- +2.21.1 + diff --git a/0003-Show-nvr-in-container-build.patch b/0003-Show-nvr-in-container-build.patch deleted file mode 100644 index d7a6bae..0000000 --- a/0003-Show-nvr-in-container-build.patch +++ /dev/null @@ -1,75 +0,0 @@ -From 7cef29d843fabce5abab317303e9016c91414913 Mon Sep 17 00:00:00 2001 -From: Ondrej Nosek -Date: Fri, 24 May 2019 11:21:34 +0200 -Subject: [PATCH] Show nvr in container-build - -JIRA: COMPOSE-3481 - -Signed-off-by: Ondrej Nosek ---- - pyrpkg/__init__.py | 42 ++++++++++++++++++++++++++++++++++-------- - 1 file changed, 34 insertions(+), 8 deletions(-) - -diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py -index 291b9ac..0348420 100644 ---- a/pyrpkg/__init__.py -+++ b/pyrpkg/__init__.py -@@ -3036,6 +3036,39 @@ class Commands(object): - # Run the command - self._run_command(cmd, shell=True) - -+ def _process_koji_task_result(self, task_id): -+ """ -+ Parse and modify output from brew/koji containing information about -+ task (and eventually builds). -+ -+ :param int task_id: id of the current task -+ :return: record containing information about repositories, builds and nvrs -+ :rtype: dict(str, str) -+ """ -+ koji_result = self.kojisession.getTaskResult(task_id) -+ if not koji_result: -+ raise rpkgError('Unknown task: %s' % task_id) -+ koji_builds = koji_result.get("koji_builds", []) -+ koji_result["koji_builds"] = [] -+ -+ for build_id in koji_builds: -+ try: -+ build_id = int(build_id) -+ except ValueError: -+ raise rpkgError("Can not convert 'build_id' to integer: %s" % build_id) -+ -+ bdata = self.kojisession.getBuild(build_id) -+ if not bdata: -+ raise rpkgError('Unknown build: %s' % build_id) -+ nvr = bdata.get("nvr") -+ if nvr: -+ koji_result.setdefault("nvrs", []).append(nvr) -+ -+ koji_result["koji_builds"].append( -+ "%s/buildinfo?buildID=%d" % (self.kojiweburl, build_id)) -+ -+ return koji_result -+ - def container_build_koji(self, target_override=False, opts={}, - kojiconfig=None, kojiprofile=None, - build_client=None, -@@ -3105,14 +3138,7 @@ class Commands(object): - if not nowait: - rv = koji_task_watcher(self.kojisession, [task_id]) - if rv == 0: -- result = self.kojisession.getTaskResult(task_id) -- try: -- result["koji_builds"] = [ -- "%s/buildinfo?buildID=%s" % (self.kojiweburl, -- build_id) -- for build_id in result.get("koji_builds", [])] -- except TypeError: -- pass -+ result = self._process_koji_task_result(task_id) - log_result(self.log.info, result) - - finally: --- -2.20.1 - diff --git a/0004-Different-import-offline-command-behavior.patch b/0004-Different-import-offline-command-behavior.patch deleted file mode 100644 index b17da5b..0000000 --- a/0004-Different-import-offline-command-behavior.patch +++ /dev/null @@ -1,123 +0,0 @@ -From 810b2f7efda65ba369f1bb865f25d351915db1ab Mon Sep 17 00:00:00 2001 -From: Ondrej Nosek -Date: Fri, 24 May 2019 17:43:01 +0200 -Subject: [PATCH] Different import --offline command behavior - -`*pkg import --offline` didn't update 'source' and '.gitignore' files. -Modified incorrect output about uploaded sources. Offline mode now does -everything but uploading sources into lookaside cache. - -JIRA: COMPOSE-3558 -Fixes: #445 -Resolves: rhbz#1175262 - -Signed-off-by: Ondrej Nosek ---- - pyrpkg/__init__.py | 5 +++-- - pyrpkg/cli.py | 15 +++++++++++---- - pyrpkg/lookaside.py | 8 +++++++- - tests/test_cli.py | 2 +- - 4 files changed, 22 insertions(+), 8 deletions(-) - -diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py -index 0348420..1f61082 100644 ---- a/pyrpkg/__init__.py -+++ b/pyrpkg/__init__.py -@@ -2818,7 +2818,7 @@ class Commands(object): - self.log.debug('Cleaning up mock temporary config directory: %s', config_dir) - self._cleanup_tmp_dir(config_dir) - -- def upload(self, files, replace=False): -+ def upload(self, files, replace=False, offline=False): - """Upload source file(s) in the lookaside cache - - Both file `sources` and `.gitignore` will be updated with uploaded -@@ -2827,6 +2827,7 @@ class Commands(object): - :param iterable files: an iterable of files to upload. - :param bool replace: optionally replace the existing tracked sources. - Defaults to `False`. -+ :param bool offline: do all the steps except uploading into lookaside cache - :raises rpkgError: if failed to add a file to file `sources`. - """ - -@@ -2859,7 +2860,7 @@ class Commands(object): - gitignore.add('/%s' % file_basename) - self.lookasidecache.upload( - self.ns_repo_name if self.lookaside_namespaced else self.repo_name, -- f, file_hash) -+ f, file_hash, offline=offline) - - sourcesf.write() - gitignore.write() -diff --git a/pyrpkg/cli.py b/pyrpkg/cli.py -index 72be1cf..eb0f499 100644 ---- a/pyrpkg/cli.py -+++ b/pyrpkg/cli.py -@@ -2027,13 +2027,20 @@ see API KEY section of copr-cli(1) man page. - - def import_srpm(self): - uploadfiles = self.cmd.import_srpm(self.args.srpm) -- if uploadfiles and not self.args.offline: -- self.cmd.upload(uploadfiles, replace=True) -+ if uploadfiles: -+ self.cmd.upload(uploadfiles, replace=True, offline=self.args.offline) - if not self.args.skip_diffs: - self.cmd.diff(cached=True) - self.log.info('--------------------------------------------') -- self.log.info("New content staged and new sources uploaded.") -- self.log.info("Commit if happy or revert with: git reset --hard HEAD") -+ if uploadfiles and self.args.offline: -+ self.log.info("New content staged without uploading sources.") -+ self.log.info("Commit and upload (%s upload ) if happy or revert with: " -+ "'git reset --hard HEAD' (warning: it reverts also eventual user " -+ "changes)." % (self._name,)) -+ else: -+ self.log.info("New content staged and new sources uploaded.") -+ self.log.info("Commit if happy or revert with: 'git reset --hard HEAD' (warning: " -+ "it reverts also eventual user changes).") - - def install(self): - self.sources() -diff --git a/pyrpkg/lookaside.py b/pyrpkg/lookaside.py -index d28c1d9..ede81ea 100644 ---- a/pyrpkg/lookaside.py -+++ b/pyrpkg/lookaside.py -@@ -269,7 +269,7 @@ class CGILookasideCache(object): - raise UploadError('Error checking for %s at %s' - % (filename, self.upload_url)) - -- def upload(self, name, filepath, hash): -+ def upload(self, name, filepath, hash, offline=False): - """Upload a source file - - :param str name: The name of the module. (usually the name of the SRPM) -@@ -277,7 +277,13 @@ class CGILookasideCache(object): - server side expects). - :param str filepath: The full path to the file to upload. - :param str hash: The known good hash of the file. -+ :param bool offline: Method prints a message about disabled upload and does return. - """ -+ if offline: -+ self.log.info("Uploading: %s", filepath) -+ self.log.info("*Upload disabled*") -+ return -+ - filename = os.path.basename(filepath) - - # As in remote_file_exists, we need to convert unicode strings to str -diff --git a/tests/test_cli.py b/tests/test_cli.py -index b3e0718..ee92389 100644 ---- a/tests/test_cli.py -+++ b/tests/test_cli.py -@@ -1163,7 +1163,7 @@ class LookasideCacheMock(object): - def destroy_lookaside_cache(self): - shutil.rmtree(self.lookasidecache_storage) - -- def lookasidecache_upload(self, repo_name, filepath, hash): -+ def lookasidecache_upload(self, repo_name, filepath, hash, offline): - filename = os.path.basename(filepath) - storage_filename = os.path.join(self.lookasidecache_storage, filename) - with open(storage_filename, 'wb') as fout: --- -2.20.1 - diff --git a/rpkg.spec b/rpkg.spec index b61cf15..9ea77f7 100644 --- a/rpkg.spec +++ b/rpkg.spec @@ -1,10 +1,6 @@ -# sitelib for noarch packages, sitearch for others (remove the unneeded one) -%{!?python2_sitelib: %global python2_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")} -%{!?__python2: %global __python2 %{__python}} - Name: rpkg -Version: 1.58 -Release: 5%{?dist} +Version: 1.60 +Release: 1%{?dist} Summary: Python library for interacting with rpm+git License: GPLv2+ and LGPLv2 @@ -21,23 +17,20 @@ Source0: https://pagure.io/releases/rpkg/%{name}-%{version}.tar.gz # and there is only old rpm-python package in EL6 and 7, so just simply to # remove rpm-py-installer for now. Patch0: remove-koji-and-rpm-py-installer-from-requires.patch -Patch1: 0001-Fix-clone-branches.patch -Patch2: 0002-Custom-handler-for-koji-watch_tasks.patch -Patch3: 0003-Show-nvr-in-container-build.patch -Patch4: 0004-Different-import-offline-command-behavior.patch +Patch1: 0001-Repair-downloading-sources-into-external-directory.patch +Patch2: 0002-Repair-compatible-formatting-for-Python-2.6.patch %if 0%{?fedora} || 0%{?rhel} > 7 -# Enable python3 build by default -%global with_python3 1 -%else -%global with_python3 0 -%endif - -%if 0%{?fedora} > 29 || 0%{?rhel} > 7 # Disable python2 build by default %global with_python2 0 +# Enable python3 build by default +%global with_python3 1 %else %global with_python2 1 +%global with_python3 0 +# sitelib for noarch packages, sitearch for others (remove the unneeded one) +%{!?python2_sitelib: %global python2_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")} +%{!?__python2: %global __python2 %{__python}} %endif %description @@ -53,12 +46,7 @@ BuildRequires: python2-devel # We br these things for man page generation due to imports BuildRequires: rpmlint -%if 0%{?rhel} && 0%{?rhel} < 8 -# TODO: Require 1.17 version of koji when it is released for RHEL -BuildRequires: python2-koji >= 1.16.2-32.6 -%else BuildRequires: python2-koji >= 1.17 -%endif BuildRequires: python2-cccolutils BuildRequires: PyYAML @@ -69,12 +57,11 @@ BuildRequires: python-requests BuildRequires: python-six >= 1.9.0 %else BuildRequires: python2-GitPython -BuildRequires: python2-gobject-base BuildRequires: python2-pycurl BuildRequires: python2-requests BuildRequires: python2-six >= 1.9.0 BuildRequires: python2-openidc-client -BuildRequires: libmodulemd +BuildRequires: python2-libmodulemd %endif %if 0%{?rhel} && 0%{?rhel} < 7 @@ -95,12 +82,7 @@ Requires: rpm-build Requires: rpmlint Requires: python2-cccolutils -%if 0%{?rhel} && 0%{?rhel} < 8 -# TODO: Require 1.17 version of koji when it is released for RHEL -Requires: python2-koji >= 1.16.2-32.6 -%else Requires: python2-koji >= 1.17 -%endif Requires: PyYAML %if 0%{?rhel} @@ -114,8 +96,7 @@ Requires: python2-GitPython Requires: python2-rpm Requires: python2-pycurl Requires: python2-six >= 1.9.0 -Requires: python2-gobject-base -Requires: libmodulemd +Requires: python2-libmodulemd %endif %if 0%{?rhel} && 0%{?rhel} < 7 @@ -134,20 +115,27 @@ Obsoletes: pyrpkg < 1.49-2 %description -n python2-%{name} A python library for managing RPM package sources in a git repository. -%endif # with python2 +%endif +# end of python2 section %if 0%{?with_python3} %package -n python3-%{name} Summary: %{summary} %{?python_provide:%python_provide python3-%{name}} +# Obsolete python2-rpkg (remove after Fedora29) +%if 0%{?with_python2} == 0 +Obsoletes: python2-rpkg < %{version}-%{release} +%endif BuildRequires: python3-devel BuildRequires: python3-GitPython +BuildRequires: python3-koji >= 1.17 %if 0%{?rhel} > 7 -BuildRequires: python3-koji >= 1.16.2-32.6 +BuildRequires: python3-gobject-base +BuildRequires: libmodulemd %else -BuildRequires: python3-koji >= 1.17 +BuildRequires: python3-libmodulemd %endif BuildRequires: python3-cccolutils BuildRequires: python3-openidc-client @@ -157,9 +145,7 @@ BuildRequires: python3-six >= 1.9.0 BuildRequires: python3-requests BuildRequires: python3-setuptools BuildRequires: python3-nose -BuildRequires: python3-gobject-base BuildRequires: python3-PyYAML -BuildRequires: libmodulemd BuildRequires: rpmlint Requires: mock @@ -169,17 +155,17 @@ Requires: rpmlint Requires: python3-GitPython >= 0.2.0 Requires: python3-cccolutils +Requires: python3-koji >= 1.17 %if 0%{?rhel} > 7 -Requires: python3-koji >= 1.16.2-32.6 +Requires: python3-gobject-base +Requires: libmodulemd %else -Requires: python3-koji >= 1.17 +Requires: python3-libmodulemd %endif Requires: python3-rpm Requires: python3-pycurl Requires: python3-six >= 1.9.0 -Requires: python3-gobject-base Requires: python3-PyYAML -Requires: libmodulemd Requires: %{name}-common = %{version}-%{release} @@ -187,7 +173,8 @@ Conflicts: fedpkg < 1.26 %description -n python3-%{name} A python library for managing RPM package sources in a git repository. -%endif # with python3 +%endif +# end of python3 section %package common @@ -267,7 +254,7 @@ nosetests tests # For noarch packages: sitelib %{python2_sitelib}/pyrpkg %{python2_sitelib}/%{name}-%{version}-py*.egg-info -%endif # with python2 +%endif %if 0%{?with_python3} %files -n python3-%{name} @@ -275,7 +262,7 @@ nosetests tests %license COPYING COPYING-koji LGPL %{python3_sitelib}/pyrpkg %{python3_sitelib}/%{name}-%{version}-py*.egg-info -%endif # with python3 +%endif %files common %{_datadir}/%{name} @@ -283,6 +270,91 @@ nosetests tests %changelog +* Fri Mar 20 2020 Ondřej Nosek - 1.60-1 +- More transparent check of retired package (onosek) +- Run newer version of sphinx-build tool (onosek) +- Lookaside cache upload is not based on an extension - #484 (onosek) +- container-build: additional warning when using --release (mlangsdo) +- allow compose-id with repo-url for container_build (rcerven) +- Clone config customization for namespaces - 231 (onosek) +- Repair Jenkins tests (onosek) +- (new-)sources should fail with git tracked files - 241 (onosek) +- Handle new cachito dependency replacement argument (athoscr) +- module-build optional key help - 280 (onosek) +- Modify watch-cancel message (sgallagh) +- Create stats for module builds in 'init' state (csomh) +- RPM 4.15 changed header returns from type 'bytes' to 'string'. Handle either + by converting to 'string' if necessary. (mmathesi) +- Don't expect module build tasks to have "rpms" (mulaieva) +- Propagate module_hotfixes to getMockConfig - rhbz#1780228 (lsedlar) +- Add check for wrong repo name format during clone - 353 (onosek) +- Simplify methods for getting namespace giturl (onosek) +- Use a single thread pool while watching module builds (csomh) +- Also capture stderr in logfile (orion) +- Line up descriptions for better code readability (onosek) +- Isolated container-build should allow arches override (rcerven) +- container-build: add --koji-parent-build argument (kdreyer) +- tests: add container-build --isolated test (kdreyer) +- container-build: add --isolated argument (kdreyer) +- Pass skip_build option to buildContainer (rcerven) +- Reuse koji_cli.lib.unique_path (cqi) + +* Thu Jan 30 2020 Fedora Release Engineering - 1.59-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Thu Jan 02 2020 Ondřej Nosek - 1.59-5 +- Some patches: +- Propagate module_hotfixes to getMockConfig +- Don't expect module build tasks to have "rpms" +- RPM 4.15 changed header - type conversion +- Create stats for module builds in 'init' state + +* Tue Dec 03 2019 Ondřej Nosek - 1.59-4 +- Patch: limited thread pool for watching module builds + +* Thu Nov 14 2019 Ondřej Nosek - 1.59-3 +- Backport: Isolated container-build should allow arches override + +* Fri Oct 25 2019 Ondrej Nosek - 1.59-2 +- Backport: container-build: add --isolated and --koji-parent-build arguments +- Backport: Pass skip_build option to buildContainer +- Backport: Reuse koji_cli.lib.unique_path + +* Mon Sep 16 2019 Ondřej Nosek - 1.59-1 +- Add argument to skip build option for container-build (rcerven) +- Sorting imports (onosek) +- Ignore error when adding exclude patterns - 1733862 (onosek) +- Path to lookaside repo fix (onosek) +- Add commands for interacting with Koji side-tag plugin - 329 (lsedlar) +- Do not delete files related to gating on import (onosek) +- Support integer values in the optional module-build arguments (mprahl) +- container-build: add --build-release argument (kdreyer) +- Allow some arguments for container-build together (onosek) +- git-changelog: Fix running on Python 3 - 3 (onosek) +- Port to libmodulemd 2 API (lsedlar) +- Module-overview allows filtering by owner - 325 (onosek) +- Different import --offline command behavior - #445 (onosek) +- Show nvr in container-build (onosek) +- Custom handler for koji watch_tasks (onosek) +- Unittests for clone command (onosek) +- Fix clone --branches - rhbz#1707223 (tmz) +- Make gitbuildhash work for windows builds (lsedlar) + +* Mon Sep 16 2019 Ondřej Nosek - 1.58-10 +- Update koji dependency + +* Sat Aug 17 2019 Miro Hrončok - 1.58-9 +- Rebuilt for Python 3.8 + +* Thu Aug 01 2019 Ondřej Nosek - 1.58-8 +- Obsoletes python2-rpkg after upgrade to Fedora30 + +* Wed Jul 31 2019 Stephen Gallagher - 1.58-7 +- Fix libmodulemd requirements + +* Fri Jul 26 2019 Fedora Release Engineering - 1.58-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + * Mon Jun 10 2019 Ondřej Nosek - 1.58-5 - Now again, libmodulemd is required instead of python3-libmodulemd because it was causing troubles with upgrades. diff --git a/sources b/sources index 6855be4..39966a2 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (rpkg-1.58.tar.gz) = 2bb8064fbf716d24a43a959be528214c90feef1b8ffdb24f8ed2338e22a4694182ae0977e074c60280605efacd6f02a6c13b9304eefa230d461311930d085e1f +SHA512 (rpkg-1.60.tar.gz) = 7055653943b897e8223e2d352e691d6c7d2ce82c926e3cfefbaea3c6fc8f71284e3e894f51a083e3f6e13a71445ea8383f188c01e5ee19fb14432244d9df11f6