public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/rpkg] 1.70-1: Revert "Orphaned for 6+ weeks"
@ 2026-08-10 21:44
0 siblings, 0 replies; 2+ messages in thread
From: @ 2026-08-10 21:44 UTC (permalink / raw)
To: git-commits
A new commit has been pushed.
Repo : rpms/rpkg
Branch : 1.70-1
Commit : d88e95af0725d8db31c52f17ac50e5b13f31ca3d
Author : Ondřej Nosek <onosek@redhat.com>
Date : 2023-04-25T19:09:46+00:00
Stats : +3055/-1 in 25 file(s)
URL : https://src.fedoraproject.org/rpms/rpkg/c/d88e95af0725d8db31c52f17ac50e5b13f31ca3d?branch=1.70-1
Log:
Revert "Orphaned for 6+ weeks"
Executed "retire" for epel9 by mistake.
This reverts commit 5698c918709a0cc6da3393022fa92919764db0a5.
---
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a29257e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,64 @@
+/rpkg-1.1.tar.gz
+/rpkg-1.2.tar.gz
+/rpkg-1.3.tar.gz
+/rpkg-1.4.tar.gz
+/rpkg-1.5.tar.gz
+/rpkg-1.6.tar.gz
+/rpkg-1.7.tar.gz
+/rpkg-1.8.tar.gz
+/rpkg-1.9.tar.gz
+/rpkg-1.10.tar.gz
+/rpkg-1.11.tar.gz
+/rpkg-1.12.tar.gz
+/rpkg-1.13.tar.gz
+/rpkg-1.14.tar.gz
+/rpkg-1.15.tar.gz
+/rpkg-1.16.tar.gz
+/rpkg-1.17.tar.gz
+/rpkg-1.18.tar.gz
+/rpkg-1.19.tar.gz
+/rpkg-1.20.tar.gz
+/rpkg-1.21.tar.gz
+/rpkg-1.24.tar.gz
+/rpkg-1.25.tar.gz
+/rpkg-1.26.tar.gz
+/rpkg-1.27.tar.gz
+/rpkg-1.28.tar.gz
+/rpkg-1.30.tar.gz
+/rpkg-1.31.tar.gz
+/rpkg-1.32.tar.gz
+/rpkg-1.33.tar.gz
+/rpkg-1.34.tar.gz
+/rpkg-1.35.tar.gz
+/rpkg-1.36.tar.gz
+/rpkg-1.37.tar.gz
+/rpkg-1.38.tar.gz
+/rpkg-1.39.tar.gz
+/rpkg-1.40.tar.gz
+/rpkg-1.41.tar.gz
+/rpkg-1.42.tar.gz
+/rpkg-1.43.tar.gz
+/rpkg-1.44.tar.gz
+/rpkg-1.45.tar.bz2
+/rpkg-1.45.tar.gz
+/rpkg-1.46.tar.gz
+/rpkg-1.47.tar.gz
+/rpkg-1.48.tar.gz
+/rpkg-1.49.tar.gz
+/rpkg-1.50.tar.gz
+/rpkg-1.51.tar.gz
+/rpkg-1.52.tar.gz
+/rpkg-1.53.tar.gz
+/rpkg-1.54.tar.gz
+/rpkg-1.55.tar.gz
+/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
+/rpkg-1.61.tar.gz
+/rpkg-1.62.tar.gz
+/rpkg-1.63.tar.gz
+/rpkg-1.64.tar.gz
+/rpkg-1.65.tar.gz
+/rpkg-1.66.tar.gz
diff --git a/0001-Do-not-use-pytest-related-dependencies-temporarily.patch b/0001-Do-not-use-pytest-related-dependencies-temporarily.patch
new file mode 100644
index 0000000..70d12b0
--- /dev/null
+++ b/0001-Do-not-use-pytest-related-dependencies-temporarily.patch
@@ -0,0 +1,25 @@
+From 50caf547ff288d8146ea5e277ab7bfcf7e8b095c Mon Sep 17 00:00:00 2001
+From: Dominik Rumian <drumian@redhat.com>
+Date: Tue, 24 Aug 2021 16:24:47 +0200
+Subject: [PATCH] [PATCH] Do not use pytest-related dependencies temporarily
+
+Signed-off-by: Dominik Rumian <drumian@redhat.com>
+---
+ setup.py | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/setup.py b/setup.py
+index 9c6d881..557cf5f 100755
+--- a/setup.py
++++ b/setup.py
+@@ -49,7 +49,6 @@ setup(
+ license="GPLv2+",
+ url="https://pagure.io/rpkg",
+ packages=find_packages(),
+- setup_requires=['setuptools_scm', 'pytest-runner'],
+ install_requires=install_requires,
+ tests_require=tests_require,
+ dependency_links=dep_links,
+--
+2.31.1
+
diff --git a/0002-Remove-pytest-coverage-execution.patch b/0002-Remove-pytest-coverage-execution.patch
new file mode 100644
index 0000000..fbc9cb7
--- /dev/null
+++ b/0002-Remove-pytest-coverage-execution.patch
@@ -0,0 +1,25 @@
+From 8bf7c3b1336738ed5938f679fc4d450c3f8f0a62 Mon Sep 17 00:00:00 2001
+From: Ondrej Nosek <onosek@redhat.com>
+Date: Wed, 7 Sep 2022 00:11:56 +0200
+Subject: [PATCH] Remove pytest coverage execution
+
+Signed-off-by: Ondrej Nosek <onosek@redhat.com>
+---
+ setup.cfg | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/setup.cfg b/setup.cfg
+index 5e29c2f..4fe73fa 100644
+--- a/setup.cfg
++++ b/setup.cfg
+@@ -5,7 +5,6 @@ test = pytest
+ max-line-length = 100
+
+ [tool:pytest]
+-addopts = --cov=pyrpkg
+ testpaths = tests
+
+ [egg_info]
+--
+2.37.2
+
diff --git a/0003-Remove-Environment-Markers-syntax.patch b/0003-Remove-Environment-Markers-syntax.patch
new file mode 100644
index 0000000..f596ce9
--- /dev/null
+++ b/0003-Remove-Environment-Markers-syntax.patch
@@ -0,0 +1,24 @@
+From ac1c2995d17b106bbfd0ab6c84ab022da8b18e3d Mon Sep 17 00:00:00 2001
+From: Ondrej Nosek <onosek@redhat.com>
+Date: Mon, 7 Feb 2022 03:01:11 +0100
+Subject: [PATCH] Remove "Environment Markers" syntax
+
+Signed-off-by: Ondrej Nosek <onosek@redhat.com>
+---
+ requirements/test-pypi.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/requirements/test-pypi.txt b/requirements/test-pypi.txt
+index 830d8c3..b732dcb 100644
+--- a/requirements/test-pypi.txt
++++ b/requirements/test-pypi.txt
+@@ -1,5 +1,5 @@
+ coverage
+-mock == 1.0.1;python_version<"3.3"
++mock == 1.0.1
+ flake8
+ pytest
+ pytest-cov
+--
+2.34.1
+
diff --git a/0004-Process-source-URLs-with-fragment-in-pre-push-hook.patch b/0004-Process-source-URLs-with-fragment-in-pre-push-hook.patch
new file mode 100644
index 0000000..e252038
--- /dev/null
+++ b/0004-Process-source-URLs-with-fragment-in-pre-push-hook.patch
@@ -0,0 +1,42 @@
+From 6d813d40aff91345b171323512b3ae641a168d45 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= <lsedlar@redhat.com>
+Date: Mon, 27 Feb 2023 08:36:20 +0100
+Subject: [PATCH] Process source URLs with fragment in pre-push hook
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Some download services do not have the actual filename in the URL.
+Packagers work around that by adding a fragment to the URL. This is then
+ignored by any server, but tricks RPM into getting the correct filename.
+
+Example:
+
+ Source0: https://crates.io/api/v1/crates/actix/0.13.0/download#/actix-0.13.0.crate
+
+The filename is obviously `actix-0.13.0.crate`, but rpkg without this
+patch will come up with `download`.
+
+Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
+---
+ pyrpkg/__init__.py | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index 6a0e9eb..c650851 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -4464,7 +4464,9 @@ class Commands(object):
+ # find out the format of the source file path. From URL use just the file name.
+ # We want to keep hierarchy of the files if possible
+ res = urllib.parse.urlparse(file_location)
+- if res.scheme and res.netloc:
++ if res.scheme and res.fragment:
++ source_files.append(os.path.basename(res.fragment))
++ elif res.scheme and res.netloc:
+ source_files.append(os.path.basename(res.path))
+ else:
+ source_files.append(file_location)
+--
+2.39.2
+
diff --git a/0005-container-build-update-signing-intent-help-for-OSBS-.patch b/0005-container-build-update-signing-intent-help-for-OSBS-.patch
new file mode 100644
index 0000000..4ead6a3
--- /dev/null
+++ b/0005-container-build-update-signing-intent-help-for-OSBS-.patch
@@ -0,0 +1,30 @@
+From e38cfe4b688b600c411a9745922b77ebb9c14122 Mon Sep 17 00:00:00 2001
+From: Ken Dreyer <kdreyer@redhat.com>
+Date: Tue, 28 Feb 2023 16:17:03 -0500
+Subject: [PATCH] container-build: update --signing-intent help for OSBS 2
+
+OSBS 2 logs the reactor configuration in a slightly different way.
+Update the --help text for --signing-intent to point users at the new
+location.
+
+Signed-off-by: Ken Dreyer <kdreyer@redhat.com>
+---
+ pyrpkg/cli.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/pyrpkg/cli.py b/pyrpkg/cli.py
+index 41c4354..c3672b3 100644
+--- a/pyrpkg/cli.py
++++ b/pyrpkg/cli.py
+@@ -1724,7 +1724,7 @@ class cliClient(object):
+ " server. If unspecified, the server will use the signing intent"
+ " of the compose_ids you specify, or the server's"
+ " default_signing_intent. To view the full list of possible"
+- " names, see REACTOR_CONFIG in orchestrator.log.")
++ " names, see atomic_reactor.config in osbs-build.log.")
+
+ parser.add_argument(
+ '--skip-remote-rules-validation',
+--
+2.39.2
+
diff --git a/0006-Do-not-generate-pre-push-hook-script-in-some-cases.patch b/0006-Do-not-generate-pre-push-hook-script-in-some-cases.patch
new file mode 100644
index 0000000..3369959
--- /dev/null
+++ b/0006-Do-not-generate-pre-push-hook-script-in-some-cases.patch
@@ -0,0 +1,37 @@
+From 30f189736137a50da4b740acf775ff6675a15a70 Mon Sep 17 00:00:00 2001
+From: Ondrej Nosek <onosek@redhat.com>
+Date: Wed, 8 Mar 2023 16:39:16 +0100
+Subject: [PATCH] Do not generate pre-push hook script in some cases
+
+Some rpkg users don't use fedpkg or similar tool for cloning
+and therefore there is no tool to execute the pre-push-check
+function. Do not generate the hook script in this case.
+
+Fixes: #665
+JIRA: RHELCMP-11392
+Signed-off-by: Ondrej Nosek <onosek@redhat.com>
+---
+ pyrpkg/__init__.py | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index acdad22..776cb21 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -1795,6 +1795,13 @@ class Commands(object):
+ for possible user mistakes.
+ """
+ tool_name = os.path.basename(sys.argv[0]) # rhpkg|fedpkg|...
++ if not tool_name:
++ # empty argv - this functionality is not executed from x-pkg tool
++ # and therefore there isn't a program that can run pre-push-check.
++ # Example: the COPR team executes 'clone' by their own script.
++ self.log.debug('Pre-push hook script was NOT added - missing '
++ 'the packaging tool like fedpkg, rhpkg, ...')
++ return
+ hook_content = textwrap.dedent("""
+ #!/bin/bash
+
+--
+2.39.2
+
diff --git a/0007-More-robust-spec-file-presence-checking.patch b/0007-More-robust-spec-file-presence-checking.patch
new file mode 100644
index 0000000..a1dde64
--- /dev/null
+++ b/0007-More-robust-spec-file-presence-checking.patch
@@ -0,0 +1,292 @@
+From 1108810bdefd0d880517b274acd6a3bd0d4156e0 Mon Sep 17 00:00:00 2001
+From: Ondrej Nosek <onosek@redhat.com>
+Date: Tue, 21 Mar 2023 02:44:04 +0100
+Subject: [PATCH 07/12] More robust spec file presence checking
+
+Some commands (verrel, sources, prep, import, ...) need to check
+whether the dist-git repository is in the correct state. It means
+at least the presence of the specfile.
+In the beginning, rpkg detects layouts. Layouts determine the file
+structure of the repository. For example, most commands can't
+be executed for the RetiredLayout (there is no specfile).
+When the repository directory exists, some layout can be always
+detected. Therefore '--path' argument is now checked for
+a valid directory.
+The timeout change in the request fixes the new bandit's finding.
+
+Fixes: #663
+JIRA: RHELCMP-11387
+
+Signed-off-by: Ondrej Nosek <onosek@redhat.com>
+---
+ pyrpkg/__init__.py | 9 ++++---
+ pyrpkg/cli.py | 8 +++---
+ pyrpkg/layout/__init__.py | 4 +--
+ pyrpkg/utils.py | 14 ++++++++++
+ tests/commands/test_push.py | 54 +++++++++++++++++++------------------
+ tests/test_cli.py | 12 ++++++---
+ 6 files changed, 63 insertions(+), 38 deletions(-)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index 776cb21..028d195 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -923,9 +923,8 @@ class Commands(object):
+ def load_spec(self):
+ """This sets the spec attribute"""
+
+- if self.layout is None:
++ if self.layout is None or isinstance(self.layout, layout.IncompleteLayout):
+ raise rpkgError('Spec file is not available')
+-
+ if self.is_retired():
+ raise rpkgError('This package or module is retired. The action has stopped.')
+
+@@ -1166,8 +1165,10 @@ class Commands(object):
+
+ @property
+ def sources_filename(self):
+- if self.layout is None:
+- return os.path.join(self.path, 'sources')
++ if self.layout is None or isinstance(self.layout, layout.IncompleteLayout):
++ raise rpkgError('Spec file is not available')
++ if self.is_retired():
++ raise rpkgError('This package or module is retired. The action has stopped.')
+ return os.path.join(
+ self.path, self.layout.sources_file_template.replace("{0.repo_name}", self.repo_name))
+
+diff --git a/pyrpkg/cli.py b/pyrpkg/cli.py
+index c3672b3..1bcf6e4 100644
+--- a/pyrpkg/cli.py
++++ b/pyrpkg/cli.py
+@@ -386,7 +386,7 @@ class cliClient(object):
+ help='Run Koji commands as a different user')
+ # Let the user define a path to work in rather than cwd
+ self.parser.add_argument('--path', default=None,
+- type=utils.u,
++ type=utils.validate_path,
+ help='Define the directory to work in '
+ '(defaults to cwd)')
+ # Verbosity
+@@ -911,8 +911,9 @@ class cliClient(object):
+ if 'path' in args:
+ # Without "path", we can't really test...
+ url = '%(protocol)s://%(host)s/%(path)s/info/refs?service=git-receive-pack' % args
+- resp = requests.head(url, auth=HTTPBasicAuth(args['username'],
+- args['password']))
++ resp = requests.head(url,
++ auth=HTTPBasicAuth(args['username'], args['password']),
++ timeout=15)
+ if resp.status_code == 401:
+ return self.oidc_client.report_token_issue()
+
+@@ -2363,6 +2364,7 @@ class cliClient(object):
+
+ def import_srpm(self):
+ uploadfiles = self.cmd.import_srpm(self.args.srpm)
++ self.load_cmd() # to reload layouts - because a specfile could appear during import
+ if uploadfiles:
+ try:
+ self.cmd.upload(uploadfiles, replace=True, offline=self.args.offline)
+diff --git a/pyrpkg/layout/__init__.py b/pyrpkg/layout/__init__.py
+index 762af0d..850ddc2 100644
+--- a/pyrpkg/layout/__init__.py
++++ b/pyrpkg/layout/__init__.py
+@@ -12,8 +12,8 @@
+ from pyrpkg.errors import LayoutError
+
+ from .base import MetaLayout
+-from .layouts import (DistGitLayout, IncompleteLayout, # noqa: F401
+- RetiredLayout, SRPMLayout)
++from .layouts import (DistGitLayout, DistGitResultsDirLayout, # noqa: F401
++ IncompleteLayout, RetiredLayout, SRPMLayout)
+
+
+ def build(path, hint=None):
+diff --git a/pyrpkg/utils.py b/pyrpkg/utils.py
+index ceb4906..3337bdb 100644
+--- a/pyrpkg/utils.py
++++ b/pyrpkg/utils.py
+@@ -26,11 +26,25 @@ if six.PY3:
+ def u(s):
+ return s
+
++ def validate_path(s):
++ abspath = os.path.abspath(s)
++ if os.path.exists(abspath):
++ return s
++ else:
++ raise argparse.ArgumentTypeError('given path \'{0}\' doesn\'t exist'.format(abspath))
++
+ getcwd = os.getcwd
+ else:
+ def u(s):
+ return s.decode('utf-8')
+
++ def validate_path(s):
++ abspath = os.path.abspath(s.decode('utf-8'))
++ if os.path.exists(abspath):
++ return s.decode('utf-8')
++ else:
++ raise argparse.ArgumentTypeError('given path \'{0}\' doesn\'t exist'.format(abspath))
++
+ getcwd = os.getcwdu
+
+
+diff --git a/tests/commands/test_push.py b/tests/commands/test_push.py
+index ef8057a..79c3a8b 100644
+--- a/tests/commands/test_push.py
++++ b/tests/commands/test_push.py
+@@ -1,9 +1,13 @@
+ # -*- coding: utf-8 -*-
+
+ import os
++import subprocess
+
+ import git
+
++import pyrpkg
++from pyrpkg.sources import SourcesFile
++
+ from . import CommandTestCase
+
+ SPECFILE_TEMPLATE = """Name: test
+@@ -22,11 +26,6 @@ Test
+ %%install
+ rm -f $RPM_BUILD_ROOT%%{_sysconfdir}/"""
+
+-CLONE_CONFIG = '''
+- bz.default-component %(module)s
+- sendemail.to %(module)s-owner@fedoraproject.org
+-'''
+-
+
+ class CommandPushTestCase(CommandTestCase):
+
+@@ -45,28 +44,30 @@ class CommandPushTestCase(CommandTestCase):
+
+ self.make_new_git(self.module)
+
+- import pyrpkg
+- cmd = pyrpkg.Commands(self.path, self.lookaside,
+- self.lookasidehash,
+- self.lookaside_cgi, self.gitbaseurl,
+- self.anongiturl, self.branchre, self.kojiprofile,
+- self.build_client, self.user, self.dist,
+- self.target, self.quiet)
+- cmd.clone_config_rpms = CLONE_CONFIG
+- cmd.clone(self.module, anon=True)
+- cmd.path = os.path.join(self.path, self.module)
+- os.chdir(os.path.join(self.path, self.module))
++ moduledir = os.path.join(self.gitroot, self.module)
++ subprocess.check_call(['git', 'clone', 'file://%s' % moduledir],
++ cwd=self.path, stdout=subprocess.PIPE,
++ stderr=subprocess.PIPE)
++
++ self.cloned_dir = os.path.join(self.path, self.module)
++ self.cmd = pyrpkg.Commands(self.cloned_dir, self.lookaside,
++ self.lookasidehash,
++ self.lookaside_cgi, self.gitbaseurl,
++ self.anongiturl, self.branchre, self.kojiprofile,
++ self.build_client, self.user, self.dist,
++ self.target, self.quiet)
++ os.chdir(self.cloned_dir)
+
+ spec_file = 'module.spec'
+ with open(spec_file, 'w') as f:
+ f.write(SPECFILE_TEMPLATE % '')
+
+- cmd.repo.index.add([spec_file])
+- cmd.repo.index.commit("add SPEC")
++ self.cmd.repo.index.add([spec_file])
++ self.cmd.repo.index.commit("add SPEC")
+
+ # Now, change directory to parent and test the push
+ os.chdir(self.path)
+- cmd.push(no_verify=True)
++ self.cmd.push(no_verify=True)
+
+
+ class TestPushWithPatches(CommandTestCase):
+@@ -76,18 +77,20 @@ class TestPushWithPatches(CommandTestCase):
+
+ self.make_new_git(self.module)
+
+- import pyrpkg
+- self.cmd = pyrpkg.Commands(self.path, self.lookaside,
++ moduledir = os.path.join(self.gitroot, self.module)
++ subprocess.check_call(['git', 'clone', 'file://%s' % moduledir],
++ cwd=self.path, stdout=subprocess.PIPE,
++ stderr=subprocess.PIPE)
++
++ self.cloned_dir = os.path.join(self.path, self.module)
++ self.cmd = pyrpkg.Commands(self.cloned_dir, self.lookaside,
+ self.lookasidehash,
+ self.lookaside_cgi, self.gitbaseurl,
+ self.anongiturl, self.branchre,
+ self.kojiprofile,
+ self.build_client, self.user, self.dist,
+ self.target, self.quiet)
+- self.cmd.clone_config_rpms = CLONE_CONFIG
+- self.cmd.clone(self.module, anon=True)
+- self.cmd.path = os.path.join(self.path, self.module)
+- os.chdir(os.path.join(self.path, self.module))
++ os.chdir(self.cloned_dir)
+
+ # Track SPEC and a.patch in git
+ spec_file = 'module.spec'
+@@ -103,7 +106,6 @@ Patch3: d.path
+ f.write(patch_file)
+
+ # Track c.patch in sources
+- from pyrpkg.sources import SourcesFile
+ sources_file = SourcesFile(self.cmd.sources_filename,
+ self.cmd.source_entry_type)
+ file_hash = self.cmd.lookasidecache.hash_file('c.patch')
+diff --git a/tests/test_cli.py b/tests/test_cli.py
+index df053aa..868ad1f 100644
+--- a/tests/test_cli.py
++++ b/tests/test_cli.py
+@@ -1841,9 +1841,11 @@ class TestMockbuild(CliTestCase):
+ @patch('pyrpkg.Commands._config_dir_basic')
+ @patch('pyrpkg.Commands._config_dir_other')
+ @patch('os.path.exists', return_value=False)
++ @patch('pyrpkg.utils.validate_path')
+ def test_use_mock_config_got_from_koji(
+- self, exists, config_dir_other, config_dir_basic):
++ self, validate_path, exists, config_dir_other, config_dir_basic):
+ mock_layout = layout.DistGitLayout(root_dir=self.cloned_repo_path)
++ validate_path.return_value = self.cloned_repo_path
+ with patch('pyrpkg.layout.build', return_value=mock_layout):
+ config_dir_basic.return_value = '/path/to/config-dir'
+
+@@ -1859,9 +1861,11 @@ class TestMockbuild(CliTestCase):
+
+ @patch('pyrpkg.Commands._config_dir_basic')
+ @patch('os.path.exists', return_value=False)
++ @patch('pyrpkg.utils.validate_path')
+ def test_fail_to_store_mock_config_in_created_config_dir(
+- self, exists, config_dir_basic):
++ self, validate_path, exists, config_dir_basic):
+ config_dir_basic.side_effect = rpkgError
++ validate_path.return_value = self.cloned_repo_path
+
+ cli_cmd = ['rpkg', '--path', self.cloned_repo_path,
+ '--release', 'rhel-7', 'mockbuild']
+@@ -1870,10 +1874,12 @@ class TestMockbuild(CliTestCase):
+ @patch('pyrpkg.Commands._config_dir_basic')
+ @patch('pyrpkg.Commands._config_dir_other')
+ @patch('os.path.exists', return_value=False)
++ @patch('pyrpkg.utils.validate_path')
+ def test_fail_to_populate_mock_config(
+- self, exists, config_dir_other, config_dir_basic):
++ self, validate_path, exists, config_dir_other, config_dir_basic):
+ config_dir_basic.return_value = '/path/to/config-dir'
+ config_dir_other.side_effect = rpkgError
++ validate_path.return_value = self.cloned_repo_path
+
+ cli_cmd = ['rpkg', '--path', self.cloned_repo_path,
+ '--release', 'rhel-7', 'mockbuild']
+--
+2.39.2
+
diff --git a/0008-Update-to-spec-file-presence-checking.patch b/0008-Update-to-spec-file-presence-checking.patch
new file mode 100644
index 0000000..723415f
--- /dev/null
+++ b/0008-Update-to-spec-file-presence-checking.patch
@@ -0,0 +1,43 @@
+From 791fd03b4de1324508583ab53c89cc67459db355 Mon Sep 17 00:00:00 2001
+From: Ondrej Nosek <onosek@redhat.com>
+Date: Tue, 21 Mar 2023 13:44:38 +0100
+Subject: [PATCH 08/12] Update to spec file presence checking
+
+Using a different approach to checking the layout. Older way prevented
+`retire` function working correctly. Layouts are detected at the
+beginning of the run and the result stays the same, unlike the direct
+checking files like dead.package in function `is_retired`.
+
+Fixes: #663
+JIRA: RHELCMP-11387
+
+Signed-off-by: Ondrej Nosek <onosek@redhat.com>
+---
+ pyrpkg/__init__.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index 028d195..e8f4886 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -925,7 +925,7 @@ class Commands(object):
+
+ if self.layout is None or isinstance(self.layout, layout.IncompleteLayout):
+ raise rpkgError('Spec file is not available')
+- if self.is_retired():
++ if isinstance(self.layout, layout.RetiredLayout):
+ raise rpkgError('This package or module is retired. The action has stopped.')
+
+ # Get a list of ".spec" files in the path we're looking at
+@@ -1167,7 +1167,7 @@ class Commands(object):
+ def sources_filename(self):
+ if self.layout is None or isinstance(self.layout, layout.IncompleteLayout):
+ raise rpkgError('Spec file is not available')
+- if self.is_retired():
++ if isinstance(self.layout, layout.RetiredLayout):
+ raise rpkgError('This package or module is retired. The action has stopped.')
+ return os.path.join(
+ self.path, self.layout.sources_file_template.replace("{0.repo_name}", self.repo_name))
+--
+2.39.2
+
diff --git a/0009-Add-more-information-about-pre-push-hook.patch b/0009-Add-more-information-about-pre-push-hook.patch
new file mode 100644
index 0000000..60bad27
--- /dev/null
+++ b/0009-Add-more-information-about-pre-push-hook.patch
@@ -0,0 +1,44 @@
+From 0393dc39bf450cf20df9db63bac135c078f64a14 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= <lsedlar@redhat.com>
+Date: Tue, 28 Mar 2023 08:53:30 +0200
+Subject: [PATCH 09/12] Add more information about pre-push hook
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+It's not obvious to many users where the check is coming from, and they
+have the power to edit the script or delete it completely. Let's try to
+improve that a bit.
+
+Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
+---
+ pyrpkg/__init__.py | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index e8f4886..7a3c9c6 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -1806,6 +1806,10 @@ class Commands(object):
+ hook_content = textwrap.dedent("""
+ #!/bin/bash
+
++ # This file was generated by {0} when cloning the repository.
++ # You can edit it to your liking or delete completely. It will not
++ # be recreated.
++
+ _remote="$1"
+ _url="$2"
+
+@@ -4429,7 +4433,7 @@ class Commands(object):
+ return self._repo_name, version, release
+
+ def pre_push_check(self, ref):
+- show_hint = ('Hint: this check (pre-push hook script) can be bypassed by adding '
++ show_hint = ('Hint: this check (.git/hooks/pre-push script) can be bypassed by adding '
+ 'the argument \'--no-verify\' argument to the push command.')
+ try:
+ commit = self.repo.commit(ref)
+--
+2.39.2
+
diff --git a/0010-pre-push-check-have-to-use-spectool-with-define.patch b/0010-pre-push-check-have-to-use-spectool-with-define.patch
new file mode 100644
index 0000000..bfe7094
--- /dev/null
+++ b/0010-pre-push-check-have-to-use-spectool-with-define.patch
@@ -0,0 +1,146 @@
+From d5be51eec99108c3809551b615064d0c5cbe628a Mon Sep 17 00:00:00 2001
+From: Ondrej Nosek <onosek@redhat.com>
+Date: Tue, 28 Mar 2023 19:58:06 +0200
+Subject: [PATCH 10/12] `pre-push-check` have to use spectool with --define
+
+To get all defined source files and patches from the specfile,
+the 'spectool' utility needs '--define' argument(s) to set specific
+paths for the repository.
+
+JIRA: RHELCMP-11466
+Fixes: #672
+
+Signed-off-by: Ondrej Nosek <onosek@redhat.com>
+---
+ pyrpkg/__init__.py | 57 +++++++++++++++------------
+ tests/commands/test_pre_push_check.py | 3 +-
+ 2 files changed, 33 insertions(+), 27 deletions(-)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index 7a3c9c6..584c141 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -4442,30 +4442,41 @@ class Commands(object):
+ sys.exit(1)
+
+ try:
++ clone_dir = tempfile.mkdtemp(prefix="pre_push_hook_")
++ for cmd in [
++ ('git', 'clone', self.path, clone_dir),
++ ('git', 'checkout', ref),
++ ]:
++ ret, _, _ = self._run_command(cmd, cwd=clone_dir,
++ # suppress unwanted printing of command line messages
++ return_stdout=True, return_stderr=True)
++ if ret != 0:
++ self.log.error('Command \'{0}\' failed. Push operation '
++ 'was cancelled.'.format(' '.join(cmd)))
++ self.log.warning(show_hint)
++ sys.exit(2)
++
++ # get all source files from the specfile (including patches)
+ # Assume, that specfile names are same in the active branch
+ # and in the pushed branch (git checkout f37 && git push origin rawhide)
+ # in this case 'f37' is active branch and 'rawhide' is pushed branch.
+ specfile_path_absolute = os.path.join(self.layout.specdir, self.spec)
+ # convert to relative path
+ specfile_path = os.path.relpath(specfile_path_absolute, start=self.path)
+- spec_content = self.repo.git.cat_file("-p", "{0}:{1}".format(ref, specfile_path))
+- except Exception:
+- # It might be the case of an empty commit
+- self.log.warning('Specfile doesn\'t exist. Push operation continues.')
+- return
+-
+- # load specfile content from pushed branch and save it into a temporary file
+- with tempfile.NamedTemporaryFile(mode="w+") as temporary_spec:
+- temporary_spec.write(spec_content)
+- temporary_spec.flush()
+- # get all source files from the specfile (including patches)
+- cmd = ('spectool', '-l', temporary_spec.name)
+- ret, stdout, _ = self._run_command(cmd, return_text=True, return_stdout=True)
++ cmd = ['spectool', '-l', os.path.join(clone_dir, specfile_path)]
++ # extract just '--define' arguments from rpmdefines
++ for opt, val in zip(self.rpmdefines[0::2], self.rpmdefines[1::2]):
++ if opt == '--define':
++ cmd.extend((opt, val))
++ ret, stdout, _ = self._run_command(cmd, cwd=clone_dir,
++ return_text=True, return_stdout=True)
+ if ret != 0:
+ self.log.error('Command \'{0}\' failed. Push operation '
+ 'was cancelled.'.format(' '.join(cmd)))
+ self.log.warning(show_hint)
+- sys.exit(2)
++ sys.exit(3)
++ finally:
++ self._cleanup_tmp_dir(clone_dir)
+
+ source_files = []
+ # extract source files from the spectool's output
+@@ -4490,22 +4501,16 @@ class Commands(object):
+ sources_file_path_absolute = self.sources_filename
+ # convert to relative path
+ sources_file_path = os.path.relpath(sources_file_path_absolute, start=self.path)
+- sources_file_content = self.repo.git.cat_file(
+- '-p', '{0}:{1}'.format(ref, sources_file_path))
++
++ # parse 'sources' files content
++ sourcesf = SourcesFile(sources_file_path, self.source_entry_type)
++ sourcesf_entries = set(item.file for item in sourcesf.entries)
+ except Exception:
+ self.log.warning('\'sources\' file doesn\'t exist. Push operation continues.')
+ # NOTE: check doesn't fail when 'sources' file doesn't exist. Just skips the rest.
+ # it might be the case of the push without 'sources' = retiring the repository
+ return
+
+- # load 'sources' file content from pushed branch and save it into a temporary file
+- with tempfile.NamedTemporaryFile(mode="w+") as temporary_sources_file:
+- temporary_sources_file.write(sources_file_content)
+- temporary_sources_file.flush()
+- # parse 'sources' files content
+- sourcesf = SourcesFile(temporary_sources_file.name, self.source_entry_type)
+- sourcesf_entries = set(item.file for item in sourcesf.entries)
+-
+ # list of all files (their relative paths) in the commit
+ repo_entries = set(item.path for item in commit.tree.traverse() if item.type != "tree")
+
+@@ -4518,7 +4523,7 @@ class Commands(object):
+ 'nor tracked in git. '
+ 'Push operation was cancelled'.format(source_file))
+ self.log.warning(show_hint)
+- sys.exit(3)
++ sys.exit(4)
+
+ # verify all file entries in 'sources' were uploaded to the lookaside cache
+ for entry in sourcesf.entries:
+@@ -4532,6 +4537,6 @@ class Commands(object):
+ self.log.error('Source file (or tarball) \'{}\' wasn\'t uploaded to the lookaside '
+ 'cache. Push operation was cancelled.'.format(filename))
+ self.log.warning(show_hint)
+- sys.exit(4)
++ sys.exit(5)
+
+ return 0 # The push operation continues
+diff --git a/tests/commands/test_pre_push_check.py b/tests/commands/test_pre_push_check.py
+index 5e314b9..ee151c1 100644
+--- a/tests/commands/test_pre_push_check.py
++++ b/tests/commands/test_pre_push_check.py
+@@ -37,6 +37,7 @@ class TestPrePushCheck(CommandTestCase):
+ def setUp(self):
+ super(TestPrePushCheck, self).setUp()
+
++ self.dist = "rhel-8"
+ self.make_new_git(self.module)
+
+ moduledir = os.path.join(self.gitroot, self.module)
+@@ -87,7 +88,7 @@ Patch3: d.patch
+ with self.assertRaises(SystemExit) as exc:
+ self.cmd.pre_push_check("HEAD")
+
+- self.assertEqual(exc.exception.code, 3)
++ self.assertEqual(exc.exception.code, 4)
+ log_error.assert_called_once_with("Source file 'b.patch' was neither listed in the "
+ "'sources' file nor tracked in git. Push operation "
+ "was cancelled")
+--
+2.39.2
+
diff --git a/0011-A-HEAD-query-into-a-lookaside-cache.patch b/0011-A-HEAD-query-into-a-lookaside-cache.patch
new file mode 100644
index 0000000..a3281b2
--- /dev/null
+++ b/0011-A-HEAD-query-into-a-lookaside-cache.patch
@@ -0,0 +1,97 @@
+From 77cd608e596af94811c22a16ff58a265d9c7381e Mon Sep 17 00:00:00 2001
+From: Ondrej Nosek <onosek@redhat.com>
+Date: Fri, 31 Mar 2023 14:09:09 +0200
+Subject: [PATCH 11/12] A HEAD query into a lookaside cache
+
+A query about whether some file is present in the lookaside cache was
+under authentication and it prevented using command `pre-push-check`
+for those without the 'packager' permission.
+Added another method (based on HTTP HEAD), that allows the same check
+without authentication.
+
+JIRA: RHELCMP-11485
+Fixes: https://pagure.io/fedpkg/issue/513
+
+Signed-off-by: Ondrej Nosek <onosek@redhat.com>
+---
+ pyrpkg/__init__.py | 2 +-
+ pyrpkg/lookaside.py | 36 ++++++++++++++++++++++++++++++++++--
+ 2 files changed, 35 insertions(+), 3 deletions(-)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index 584c141..15203b7 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -4529,7 +4529,7 @@ class Commands(object):
+ for entry in sourcesf.entries:
+ filename = entry.file
+ hash = entry.hash
+- file_exists_in_lookaside = self.lookasidecache.remote_file_exists(
++ file_exists_in_lookaside = self.lookasidecache.remote_file_exists_head(
+ self.ns_repo_name if self.lookaside_namespaced else self.repo_name,
+ filename,
+ hash)
+diff --git a/pyrpkg/lookaside.py b/pyrpkg/lookaside.py
+index 90f0f1e..ecbf12b 100644
+--- a/pyrpkg/lookaside.py
++++ b/pyrpkg/lookaside.py
+@@ -22,7 +22,7 @@ import sys
+
+ import pycurl
+ import six
+-from six.moves import http_client
++from six.moves import http_client, urllib
+
+ from .errors import (AlreadyUploadedError, DownloadError, InvalidHashType,
+ UploadError)
+@@ -157,7 +157,7 @@ class CGILookasideCache(object):
+ return
+
+ self.log.info("Downloading %s", filename)
+- urled_file = filename.replace(' ', '%20')
++ urled_file = urllib.parse.quote(filename)
+ url = self.get_download_url(name, urled_file, hash, hashtype, **kwargs)
+ if isinstance(url, six.text_type):
+ url = url.encode('utf-8')
+@@ -200,6 +200,38 @@ class CGILookasideCache(object):
+ if not self.file_is_valid(outfile, hash, hashtype=hashtype):
+ raise DownloadError('%s failed checksum' % filename)
+
++ def remote_file_exists_head(self, name, filename, hash):
++ """Verify whether a file exists on the lookaside cache.
++ Uses a HTTP HEAD request and doesn't require authentication.
++
++ :param str name: The name of the module. (usually the name of the
++ SRPM). This can include the namespace as well (depending on what
++ the server side expects).
++ :param str filename: The name of the file to check for.
++ :param str hash: The known good hash of the file.
++ """
++
++ urled_file = urllib.parse.quote(filename)
++ url = self.get_download_url(name, urled_file, hash, self.hashtype)
++
++ c = pycurl.Curl()
++ c.setopt(pycurl.URL, url)
++ c.setopt(pycurl.NOBODY, True)
++ c.setopt(pycurl.FOLLOWLOCATION, 1)
++
++ try:
++ c.perform()
++ status = c.getinfo(pycurl.RESPONSE_CODE)
++ except Exception as e:
++ raise DownloadError(e)
++ finally:
++ c.close()
++
++ if status != 200:
++ self.log.debug('Unavailable file \'%s\' at %s' % (filename, url))
++ return False
++ return True
++
+ def remote_file_exists(self, name, filename, hash):
+ """Verify whether a file exists on the lookaside cache
+
+--
+2.39.2
+
diff --git a/0012-pre-push-hook-script-contains-a-user-s-config.patch b/0012-pre-push-hook-script-contains-a-user-s-config.patch
new file mode 100644
index 0000000..ff2676d
--- /dev/null
+++ b/0012-pre-push-hook-script-contains-a-user-s-config.patch
@@ -0,0 +1,197 @@
+From 1f03eb9102f765c36cc201a499d815732e67dd39 Mon Sep 17 00:00:00 2001
+From: Ondrej Nosek <onosek@redhat.com>
+Date: Mon, 27 Mar 2023 23:34:12 +0200
+Subject: [PATCH 12/12] pre-push hook script contains a user's config
+
+When the `clone` command is called with an argument
+-C|--config <config_file>
+this argument is placed to the generated pre-push script.
+
+Fixes: #667
+JIRA: RHELCMP-11394
+
+Signed-off-by: Ondrej Nosek <onosek@redhat.com>
+---
+ pyrpkg/__init__.py | 23 ++++++++++++-------
+ pyrpkg/cli.py | 6 +++--
+ tests/commands/test_clone.py | 44 ++++++++++++++++++++++++++++++++++++
+ 3 files changed, 63 insertions(+), 10 deletions(-)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index 15203b7..9996402 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -1566,7 +1566,8 @@ class Commands(object):
+ return
+
+ def clone(self, repo, path=None, branch=None, bare_dir=None,
+- anon=False, target=None, depth=None, extra_args=None):
++ anon=False, target=None, depth=None, extra_args=None,
++ config_path=None):
+ """Clone a repo, optionally check out a specific branch.
+
+ :param str repo: the name of the repository to clone.
+@@ -1583,6 +1584,7 @@ class Commands(object):
+ to the specified number of commits.
+ :param list extra_args: additional arguments that are passed to
+ the clone command.
++ :param str config_path: path to the global config file
+ """
+
+ if not path:
+@@ -1638,7 +1640,7 @@ class Commands(object):
+
+ if not bare_dir:
+ self._add_git_excludes(os.path.join(path, git_dir))
+- self._add_git_pre_push_hook(os.path.join(path, git_dir))
++ self._add_git_pre_push_hook(os.path.join(path, git_dir), config_path)
+
+ return
+
+@@ -1654,7 +1656,7 @@ class Commands(object):
+ return repo
+
+ def clone_with_dirs(self, repo, anon=False, target=None, depth=None,
+- extra_args=None):
++ extra_args=None, config_path=None):
+ """Clone a repo old style with subdirs for each branch.
+
+ :param str repo: name of the repository to clone.
+@@ -1666,6 +1668,7 @@ class Commands(object):
+ to the specified number of commits.
+ :param list extra_args: additional arguments that are passed to
+ the clone command.
++ :param str config_path: path to the global config file
+ """
+
+ self._push_url = None
+@@ -1724,7 +1727,7 @@ class Commands(object):
+
+ # Add excludes
+ self._add_git_excludes(branch_path)
+- self._add_git_pre_push_hook(branch_path)
++ self._add_git_pre_push_hook(branch_path, config_path)
+ except (git.GitCommandError, OSError) as e:
+ raise rpkgError('Could not locally clone %s from %s: %s'
+ % (branch, repo_path, e))
+@@ -1787,7 +1790,7 @@ class Commands(object):
+ git_excludes.write()
+ self.log.debug('Git-excludes patterns were added into %s' % git_excludes_path)
+
+- def _add_git_pre_push_hook(self, conf_dir):
++ def _add_git_pre_push_hook(self, repo_dir, config_path=None):
+ """
+ Create pre-push hook script and write it in the location:
+ <repository_directory>/.git/hooks/pre-push
+@@ -1803,6 +1806,10 @@ class Commands(object):
+ self.log.debug('Pre-push hook script was NOT added - missing '
+ 'the packaging tool like fedpkg, rhpkg, ...')
+ return
++
++ # in case the clone command run with 'x-pkg -C <config_path> clone <repo_name>'
++ config_arg = ' -C "{0}"'.format(os.path.realpath(config_path)) if config_path else ""
++
+ hook_content = textwrap.dedent("""
+ #!/bin/bash
+
+@@ -1818,7 +1825,7 @@ class Commands(object):
+ do
+ command -v {0} >/dev/null 2>&1 || {{ echo >&2 "Warning: '{0}' is missing, \\
+ pre-push check is omitted. See .git/hooks/pre-push"; exit 0; }}
+- {0} pre-push-check "$local_sha"
++ {0}{1} pre-push-check "$local_sha"
+ ret_code=$?
+ if [ $ret_code -ne 0 ] && [ $exit_code -eq 0 ]; then
+ exit_code=$ret_code
+@@ -1826,8 +1833,8 @@ class Commands(object):
+ done
+
+ exit $exit_code
+- """).strip().format(tool_name)
+- git_pre_push_hook_path = os.path.join(conf_dir, '.git/hooks/pre-push')
++ """).strip().format(tool_name, config_arg)
++ git_pre_push_hook_path = os.path.join(repo_dir, '.git/hooks/pre-push')
+ if not os.path.exists(os.path.dirname(git_pre_push_hook_path)):
+ # prepare ".git/hooks" directory if it is missing
+ os.makedirs(os.path.dirname(git_pre_push_hook_path))
+diff --git a/pyrpkg/cli.py b/pyrpkg/cli.py
+index 1bcf6e4..3d8ce33 100644
+--- a/pyrpkg/cli.py
++++ b/pyrpkg/cli.py
+@@ -2182,14 +2182,16 @@ class cliClient(object):
+ anon=self.args.anonymous,
+ target=self.args.clone_target,
+ depth=self.args.depth,
+- extra_args=self.extra_args)
++ extra_args=self.extra_args,
++ config_path=self.args.config)
+ else:
+ self.cmd.clone(self.args.repo[0],
+ branch=self.args.branch,
+ anon=self.args.anonymous,
+ target=self.args.clone_target,
+ depth=self.args.depth,
+- extra_args=self.extra_args)
++ extra_args=self.extra_args,
++ config_path=self.args.config)
+
+ def commit(self):
+ if self.args.with_changelog and not self.args.message:
+diff --git a/tests/commands/test_clone.py b/tests/commands/test_clone.py
+index f741864..6ef1300 100644
+--- a/tests/commands/test_clone.py
++++ b/tests/commands/test_clone.py
+@@ -95,6 +95,50 @@ class CommandCloneTestCase(CommandTestCase):
+
+ shutil.rmtree(altpath)
+
++ def test_clone_anonymous_pre_push_hook(self):
++ self.make_new_git(self.module)
++
++ altpath = tempfile.mkdtemp(prefix='rpkg-tests.')
++
++ cmd = pyrpkg.Commands(self.path, self.lookaside, self.lookasidehash,
++ self.lookaside_cgi, self.gitbaseurl,
++ self.anongiturl, self.branchre, self.kojiprofile,
++ self.build_client, self.user, self.dist,
++ self.target, self.quiet)
++ cmd.clone(self.module, anon=True, config_path=None)
++
++ moduledir = os.path.join(self.path, self.module)
++ self.assertTrue(os.path.isfile(os.path.join(moduledir, '.git/hooks/pre-push')))
++
++ with open(os.path.join(moduledir, '.git/hooks/pre-push')) as git_hook_script:
++ content = git_hook_script.read()
++ pattern = '__main__.py pre-push-check "$local_sha"'
++ self.assertIn(pattern, content)
++
++ shutil.rmtree(altpath)
++
++ def test_clone_anonymous_pre_push_hook_config(self):
++ self.make_new_git(self.module)
++
++ altpath = tempfile.mkdtemp(prefix='rpkg-tests.')
++
++ cmd = pyrpkg.Commands(self.path, self.lookaside, self.lookasidehash,
++ self.lookaside_cgi, self.gitbaseurl,
++ self.anongiturl, self.branchre, self.kojiprofile,
++ self.build_client, self.user, self.dist,
++ self.target, self.quiet)
++ cmd.clone(self.module, anon=True, config_path="/home/conf/rhpkg.conf")
++
++ moduledir = os.path.join(self.path, self.module)
++ self.assertTrue(os.path.isfile(os.path.join(moduledir, '.git/hooks/pre-push')))
++
++ with open(os.path.join(moduledir, '.git/hooks/pre-push')) as git_hook_script:
++ content = git_hook_script.read()
++ pattern = '__main__.py -C "/home/conf/rhpkg.conf" pre-push-check "$local_sha"'
++ self.assertIn(pattern, content)
++
++ shutil.rmtree(altpath)
++
+ def test_clone_anonymous_with_branch(self):
+ self.make_new_git(self.module,
+ branches=['rpkg-tests-1', 'rpkg-tests-2'])
+--
+2.39.2
+
diff --git a/0013-Fix-unittests-for-clone-and-pre-push-hook-script.patch b/0013-Fix-unittests-for-clone-and-pre-push-hook-script.patch
new file mode 100644
index 0000000..991fb22
--- /dev/null
+++ b/0013-Fix-unittests-for-clone-and-pre-push-hook-script.patch
@@ -0,0 +1,49 @@
+From 1d82b7eaf98e695689a7dc10bd308030e3c13eea Mon Sep 17 00:00:00 2001
+From: Ondrej Nosek <onosek@redhat.com>
+Date: Sat, 1 Apr 2023 01:34:34 +0200
+Subject: [PATCH] Fix unittests for `clone` and pre-push hook script
+
+Signed-off-by: Ondrej Nosek <onosek@redhat.com>
+---
+ tests/commands/test_clone.py | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/tests/commands/test_clone.py b/tests/commands/test_clone.py
+index 6ef1300..85fdfd1 100644
+--- a/tests/commands/test_clone.py
++++ b/tests/commands/test_clone.py
+@@ -1,5 +1,6 @@
+ import os
+ import shutil
++import sys
+ import tempfile
+
+ import git
+@@ -110,9 +111,10 @@ class CommandCloneTestCase(CommandTestCase):
+ moduledir = os.path.join(self.path, self.module)
+ self.assertTrue(os.path.isfile(os.path.join(moduledir, '.git/hooks/pre-push')))
+
++ clonned_by = os.path.basename(sys.argv[0])
+ with open(os.path.join(moduledir, '.git/hooks/pre-push')) as git_hook_script:
+ content = git_hook_script.read()
+- pattern = '__main__.py pre-push-check "$local_sha"'
++ pattern = '{0} pre-push-check "$local_sha"'.format(clonned_by)
+ self.assertIn(pattern, content)
+
+ shutil.rmtree(altpath)
+@@ -132,9 +134,11 @@ class CommandCloneTestCase(CommandTestCase):
+ moduledir = os.path.join(self.path, self.module)
+ self.assertTrue(os.path.isfile(os.path.join(moduledir, '.git/hooks/pre-push')))
+
++ clonned_by = os.path.basename(sys.argv[0])
+ with open(os.path.join(moduledir, '.git/hooks/pre-push')) as git_hook_script:
+ content = git_hook_script.read()
+- pattern = '__main__.py -C "/home/conf/rhpkg.conf" pre-push-check "$local_sha"'
++ pattern = '{0} -C "/home/conf/rhpkg.conf" pre-push-check ' \
++ '"$local_sha"'.format(clonned_by)
+ self.assertIn(pattern, content)
+
+ shutil.rmtree(altpath)
+--
+2.39.2
+
diff --git a/0014-import_srpm-allow-pre-generated-srpms.patch b/0014-import_srpm-allow-pre-generated-srpms.patch
new file mode 100644
index 0000000..f596265
--- /dev/null
+++ b/0014-import_srpm-allow-pre-generated-srpms.patch
@@ -0,0 +1,105 @@
+From d87cb37fa2fea2ed535b9085a1f4c607083e1c2e Mon Sep 17 00:00:00 2001
+From: Ondrej Nosek <onosek@redhat.com>
+Date: Tue, 4 Apr 2023 01:40:23 +0200
+Subject: [PATCH 1/6] import_srpm: allow pre-generated srpms
+
+When active, do not care specfile in the srpm is processed by
+rpmautospec. Can be activated only directly via pyrpkg 'Commands'
+object.
+
+Relates: https://github.com/fedora-copr/copr/issues/2317
+Fixes: #655
+RHELCMP-11085
+
+Signed-off-by: Ondrej Nosek <onosek@redhat.com>
+---
+ pyrpkg/__init__.py | 6 +++++-
+ tests/test_cli.py | 41 +++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 46 insertions(+), 1 deletion(-)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index 9996402..ecb99c9 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -110,7 +110,7 @@ class Commands(object):
+ build_client, user=None,
+ dist=None, target=None, quiet=False,
+ distgit_namespaced=False, realms=None, lookaside_namespaced=False,
+- git_excludes=None, results_dir='root'):
++ git_excludes=None, results_dir='root', allow_pre_generated_srpm=False):
+ """Init the object and some configuration details."""
+
+ # Path to operate on, most often pwd
+@@ -239,6 +239,9 @@ class Commands(object):
+ # Layout setup
+ self.layout = layout.build(self.path,
+ 'resultsdir' if self.results_dir == 'subdir' else None)
++ # A Configuration value used in 'import_srpm' command (comes from the Copr team)
++ # If pre-generated srpms are allowed, don't care specfile is processed by rpmautospec
++ self.allow_pre_generated_srpm = allow_pre_generated_srpm
+
+ # Define properties here
+ # Properties allow us to "lazy load" various attributes, which also means
+@@ -1471,6 +1474,7 @@ class Commands(object):
+ # the dist-git repo without any specfiles - right after initialization) we are
+ # not able determine which the main specfile is.
+ if file.endswith('.spec') and not file.startswith('.') \
++ and not self.allow_pre_generated_srpm \
+ and spec_file_processed_by_rpmautospec(file, target_dir):
+ raise rpkgError('SRPM was processed by rpmautospec '
+ '(specfile "{}" was analyzed)'.format(file))
+diff --git a/tests/test_cli.py b/tests/test_cli.py
+index 868ad1f..02620ef 100644
+--- a/tests/test_cli.py
++++ b/tests/test_cli.py
+@@ -1784,6 +1784,47 @@ class TestImportSrpm(LookasideCacheMock, CliTestCase):
+ self.assertFilesExist(['package.rpmlintrc'], search_dir=self.chaos_repo)
+ self.assertFilesNotExist(['the_file_is_not_in_reserved.yaml'], search_dir=self.chaos_repo)
+
++ @patch('pyrpkg.spec_file_processed_by_rpmautospec')
++ def test_import_srpm_not_processed_by_rpmautospec(self, rpmautospec_processed):
++ cli_cmd = ['rpkg', '--path', self.chaos_repo, '--name', 'docpkg',
++ 'import', '--skip-diffs', self.srpm_file]
++
++ rpmautospec_processed.return_value = False
++ with patch('sys.argv', new=cli_cmd):
++ cli = self.new_cli()
++ with patch('pyrpkg.lookaside.CGILookasideCache.upload', self.lookasidecache_upload):
++ cli.import_srpm() # no exception should be raised
++ rpmautospec_processed.assert_called_once()
++
++ @patch('pyrpkg.spec_file_processed_by_rpmautospec')
++ def test_import_srpm_processed_by_rpmautospec(self, rpmautospec_processed):
++ cli_cmd = ['rpkg', '--path', self.chaos_repo, '--name', 'docpkg',
++ 'import', '--skip-diffs', self.srpm_file]
++
++ rpmautospec_processed.return_value = True
++ with patch('sys.argv', new=cli_cmd):
++ cli = self.new_cli()
++ with patch('pyrpkg.lookaside.CGILookasideCache.upload', self.lookasidecache_upload):
++ six.assertRaisesRegex(
++ self,
++ rpkgError,
++ 'SRPM was processed by rpmautospec',
++ cli.import_srpm)
++ rpmautospec_processed.assert_called_once()
++
++ @patch('pyrpkg.spec_file_processed_by_rpmautospec')
++ def test_import_srpm_processed_by_rpmautospec_allowed(self, rpmautospec_processed):
++ cli_cmd = ['rpkg', '--path', self.chaos_repo, '--name', 'docpkg',
++ 'import', '--skip-diffs', self.srpm_file]
++
++ rpmautospec_processed.return_value = True
++ with patch('sys.argv', new=cli_cmd):
++ cli = self.new_cli()
++ cli.cmd.allow_pre_generated_srpm = True
++ with patch('pyrpkg.lookaside.CGILookasideCache.upload', self.lookasidecache_upload):
++ cli.import_srpm() # no exception should be raised
++ rpmautospec_processed.assert_not_called()
++
+
+ class TestMockbuild(CliTestCase):
+ """Test mockbuild command"""
+--
+2.39.2
+
diff --git a/0015-Ignore-missing-spec-file-in-pre-push-hook.patch b/0015-Ignore-missing-spec-file-in-pre-push-hook.patch
new file mode 100644
index 0000000..b32833c
--- /dev/null
+++ b/0015-Ignore-missing-spec-file-in-pre-push-hook.patch
@@ -0,0 +1,37 @@
+From 3ebfeae20c74de0ca4b26b22135e1996265ea4ce Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= <lsedlar@redhat.com>
+Date: Wed, 5 Apr 2023 11:41:23 +0200
+Subject: [PATCH 2/6] Ignore missing spec file in pre-push hook
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+For modules or containers there will be no spec file, and there is
+nothing to block the push on.
+
+Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
+---
+ pyrpkg/__init__.py | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index ecb99c9..d3a7a1c 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -4471,7 +4471,12 @@ class Commands(object):
+ # Assume, that specfile names are same in the active branch
+ # and in the pushed branch (git checkout f37 && git push origin rawhide)
+ # in this case 'f37' is active branch and 'rawhide' is pushed branch.
+- specfile_path_absolute = os.path.join(self.layout.specdir, self.spec)
++ try:
++ specfile_path_absolute = os.path.join(self.layout.specdir, self.spec)
++ except rpkgError:
++ # No specfile found, nothing to check
++ return
++
+ # convert to relative path
+ specfile_path = os.path.relpath(specfile_path_absolute, start=self.path)
+ cmd = ['spectool', '-l', os.path.join(clone_dir, specfile_path)]
+--
+2.39.2
+
diff --git a/0016-Check-remote-file-with-correct-hash.patch b/0016-Check-remote-file-with-correct-hash.patch
new file mode 100644
index 0000000..9bf9eac
--- /dev/null
+++ b/0016-Check-remote-file-with-correct-hash.patch
@@ -0,0 +1,61 @@
+From 4bd4ab1823a7d4bc218b8057b7f00808fabf7648 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= <lsedlar@redhat.com>
+Date: Wed, 5 Apr 2023 09:34:33 +0200
+Subject: [PATCH 3/6] Check remote file with correct hash
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The configured hashtype doesn't have to actually be used. There can be
+old repos that still use md5.
+
+JIRA: RHELCMP-11508
+Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
+---
+ pyrpkg/__init__.py | 3 ++-
+ pyrpkg/lookaside.py | 5 +++--
+ 2 files changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index d3a7a1c..0b9a869 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -4548,7 +4548,8 @@ class Commands(object):
+ file_exists_in_lookaside = self.lookasidecache.remote_file_exists_head(
+ self.ns_repo_name if self.lookaside_namespaced else self.repo_name,
+ filename,
+- hash)
++ hash,
++ hashtype=entry.hashtype)
+ if not file_exists_in_lookaside:
+ self.log.error('Source file (or tarball) \'{}\' wasn\'t uploaded to the lookaside '
+ 'cache. Push operation was cancelled.'.format(filename))
+diff --git a/pyrpkg/lookaside.py b/pyrpkg/lookaside.py
+index ecbf12b..3efcd88 100644
+--- a/pyrpkg/lookaside.py
++++ b/pyrpkg/lookaside.py
+@@ -200,7 +200,7 @@ class CGILookasideCache(object):
+ if not self.file_is_valid(outfile, hash, hashtype=hashtype):
+ raise DownloadError('%s failed checksum' % filename)
+
+- def remote_file_exists_head(self, name, filename, hash):
++ def remote_file_exists_head(self, name, filename, hash, hashtype):
+ """Verify whether a file exists on the lookaside cache.
+ Uses a HTTP HEAD request and doesn't require authentication.
+
+@@ -209,10 +209,11 @@ class CGILookasideCache(object):
+ the server side expects).
+ :param str filename: The name of the file to check for.
+ :param str hash: The known good hash of the file.
++ :param str hashtype: The type of hash
+ """
+
+ urled_file = urllib.parse.quote(filename)
+- url = self.get_download_url(name, urled_file, hash, self.hashtype)
++ url = self.get_download_url(name, urled_file, hash, hashtype or self.hashtype)
+
+ c = pycurl.Curl()
+ c.setopt(pycurl.URL, url)
+--
+2.39.2
+
diff --git a/0017-Allow-empty-commits-when-uses_rpmautospec.patch b/0017-Allow-empty-commits-when-uses_rpmautospec.patch
new file mode 100644
index 0000000..448cbc9
--- /dev/null
+++ b/0017-Allow-empty-commits-when-uses_rpmautospec.patch
@@ -0,0 +1,35 @@
+From d2c63c32306732695b7fe5f9dda3deecb7899f4f Mon Sep 17 00:00:00 2001
+From: Jiri Kyjovsky <j1.kyjovsky@gmail.com>
+Date: Sat, 15 Apr 2023 13:46:21 +0200
+Subject: [PATCH 4/6] Allow empty commits when `uses_rpmautospec`
+
+To avoid situations where the command `commit` by default does
+commit when no change in repo is present.
+
+Fixes: #677
+JIRA: RHELCMP-11489
+Merges: https://pagure.io/rpkg/pull-request/688
+
+Signed-off-by: Jiri Kyjovsky <j1.kyjovsky@gmail.com>
+---
+ pyrpkg/__init__.py | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index 0b9a869..187796e 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -1867,7 +1867,9 @@ class Commands(object):
+
+ # construct the git command
+ # We do this via subprocess because the git module is terrible.
+- cmd = ['git', 'commit', '--allow-empty']
++ cmd = ['git', 'commit']
++ if not self.is_retired() and self.uses_rpmautospec:
++ cmd.append('--allow-empty')
+ if signoff:
+ cmd.append('-s')
+ if self.quiet:
+--
+2.39.2
+
diff --git a/0018-Config-file-option-to-skip-the-hook-script-creation.patch b/0018-Config-file-option-to-skip-the-hook-script-creation.patch
new file mode 100644
index 0000000..fa9aa01
--- /dev/null
+++ b/0018-Config-file-option-to-skip-the-hook-script-creation.patch
@@ -0,0 +1,126 @@
+From b48eb502d330ec7a543805d7f185ea270df75b90 Mon Sep 17 00:00:00 2001
+From: Ondrej Nosek <onosek@redhat.com>
+Date: Wed, 12 Apr 2023 00:42:04 +0200
+Subject: [PATCH 5/6] Config file option to skip the hook script creation
+
+A new option named "skip_hooks" can be added to the config file
+(into the main section). It accepts boolean values and when
+the option is present and set, it prevents creating the pre-push
+hook script during cloning a dist-git repository.
+
+Fixes: https://pagure.io/fedpkg/issue/515
+JIRA: RHELCMP-11491
+
+Signed-off-by: Ondrej Nosek <onosek@redhat.com>
+---
+ pyrpkg/__init__.py | 14 ++++++++++----
+ pyrpkg/cli.py | 13 +++++++++++--
+ 2 files changed, 21 insertions(+), 6 deletions(-)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index 187796e..7fddff7 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -1571,7 +1571,7 @@ class Commands(object):
+
+ def clone(self, repo, path=None, branch=None, bare_dir=None,
+ anon=False, target=None, depth=None, extra_args=None,
+- config_path=None):
++ config_path=None, skip_hooks=None):
+ """Clone a repo, optionally check out a specific branch.
+
+ :param str repo: the name of the repository to clone.
+@@ -1589,6 +1589,7 @@ class Commands(object):
+ :param list extra_args: additional arguments that are passed to
+ the clone command.
+ :param str config_path: path to the global config file
++ :param bool skip_hooks: skip creation pre-push hook script
+ """
+
+ if not path:
+@@ -1644,7 +1645,8 @@ class Commands(object):
+
+ if not bare_dir:
+ self._add_git_excludes(os.path.join(path, git_dir))
+- self._add_git_pre_push_hook(os.path.join(path, git_dir), config_path)
++ if not skip_hooks:
++ self._add_git_pre_push_hook(os.path.join(path, git_dir), config_path)
+
+ return
+
+@@ -1660,7 +1662,7 @@ class Commands(object):
+ return repo
+
+ def clone_with_dirs(self, repo, anon=False, target=None, depth=None,
+- extra_args=None, config_path=None):
++ extra_args=None, config_path=None, skip_hooks=None):
+ """Clone a repo old style with subdirs for each branch.
+
+ :param str repo: name of the repository to clone.
+@@ -1673,6 +1675,7 @@ class Commands(object):
+ :param list extra_args: additional arguments that are passed to
+ the clone command.
+ :param str config_path: path to the global config file
++ :param bool skip_hooks: skip creation pre-push hook script
+ """
+
+ self._push_url = None
+@@ -1731,7 +1734,8 @@ class Commands(object):
+
+ # Add excludes
+ self._add_git_excludes(branch_path)
+- self._add_git_pre_push_hook(branch_path, config_path)
++ if not skip_hooks:
++ self._add_git_pre_push_hook(branch_path, config_path)
+ except (git.GitCommandError, OSError) as e:
+ raise rpkgError('Could not locally clone %s from %s: %s'
+ % (branch, repo_path, e))
+@@ -1820,6 +1824,8 @@ class Commands(object):
+ # This file was generated by {0} when cloning the repository.
+ # You can edit it to your liking or delete completely. It will not
+ # be recreated.
++ # Creating this file can be also prevented by adding an option
++ # "skip_hooks = True" into the {0}'s config file; [{0}] section.
+
+ _remote="$1"
+ _url="$2"
+diff --git a/pyrpkg/cli.py b/pyrpkg/cli.py
+index 3d8ce33..a1f3f44 100644
+--- a/pyrpkg/cli.py
++++ b/pyrpkg/cli.py
+@@ -2177,13 +2177,21 @@ class cliClient(object):
+ self.log.warning("Repo name should't contain '.git' suffix. "
+ "Correcting the repo name: '%s'" % repo)
+
++ skip_hooks = None
++ if self.config.has_option(self.name, "skip_hooks"):
++ try:
++ skip_hooks = self.config.getboolean(self.name, "skip_hooks")
++ except ValueError:
++ self.log.error("Error: config file option 'skip_hooks'")
++ raise
+ if self.args.branches:
+ self.cmd.clone_with_dirs(self.args.repo[0],
+ anon=self.args.anonymous,
+ target=self.args.clone_target,
+ depth=self.args.depth,
+ extra_args=self.extra_args,
+- config_path=self.args.config)
++ config_path=self.args.config,
++ skip_hooks=skip_hooks)
+ else:
+ self.cmd.clone(self.args.repo[0],
+ branch=self.args.branch,
+@@ -2191,7 +2199,8 @@ class cliClient(object):
+ target=self.args.clone_target,
+ depth=self.args.depth,
+ extra_args=self.extra_args,
+- config_path=self.args.config)
++ config_path=self.args.config,
++ skip_hooks=skip_hooks)
+
+ def commit(self):
+ if self.args.with_changelog and not self.args.message:
+--
+2.39.2
+
diff --git a/0019-Pre-push-hook-won-t-check-private-branches.patch b/0019-Pre-push-hook-won-t-check-private-branches.patch
new file mode 100644
index 0000000..37a7c52
--- /dev/null
+++ b/0019-Pre-push-hook-won-t-check-private-branches.patch
@@ -0,0 +1,45 @@
+From 4553da364d7d8a974ab0c08834ee0a54320da2cb Mon Sep 17 00:00:00 2001
+From: Ondrej Nosek <onosek@redhat.com>
+Date: Tue, 18 Apr 2023 16:06:43 +0200
+Subject: [PATCH 6/6] Pre-push hook won't check private branches
+
+The pre-push hook script was failing the when user tried to push
+a private branch. It required using the --release argument with
+the pre-push-check command and passing additional arguments into
+the hook script. That was found unreliable and private branches
+won't be checked.
+
+Fixes: #683
+JIRA: RHELCMP-11528
+
+Signed-off-by: Ondrej Nosek <onosek@redhat.com>
+---
+ pyrpkg/__init__.py | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index 7fddff7..3f934d3 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -4489,9 +4489,15 @@ class Commands(object):
+ specfile_path = os.path.relpath(specfile_path_absolute, start=self.path)
+ cmd = ['spectool', '-l', os.path.join(clone_dir, specfile_path)]
+ # extract just '--define' arguments from rpmdefines
+- for opt, val in zip(self.rpmdefines[0::2], self.rpmdefines[1::2]):
+- if opt == '--define':
+- cmd.extend((opt, val))
++ try:
++ for opt, val in zip(self.rpmdefines[0::2], self.rpmdefines[1::2]):
++ if opt == '--define':
++ cmd.extend((opt, val))
++ except rpkgError:
++ # this exception was caused probably by using a private branch
++ self.log.warning('The pre-push script can\'t check private branches. '
++ 'Push operation continues.')
++ return
+ ret, stdout, _ = self._run_command(cmd, cwd=clone_dir,
+ return_text=True, return_stdout=True)
+ if ret != 0:
+--
+2.39.2
+
diff --git a/dead.package b/dead.package
deleted file mode 100644
index 5204a84..0000000
--- a/dead.package
+++ /dev/null
@@ -1 +0,0 @@
-Orphaned for 6+ weeks
diff --git a/remove-koji-and-rpm-py-installer-from-requires.patch b/remove-koji-and-rpm-py-installer-from-requires.patch
new file mode 100644
index 0000000..90adee0
--- /dev/null
+++ b/remove-koji-and-rpm-py-installer-from-requires.patch
@@ -0,0 +1,29 @@
+From ec0c8b368fd560b319c6603f35dda803fe4b2e99 Mon Sep 17 00:00:00 2001
+From: Dominik Rumian <drumian@redhat.com>
+Date: Tue, 24 Aug 2021 12:51:17 +0200
+Subject: [PATCH] [PATCH] remove koji and rpm-py-installer from requires
+
+Signed-off-by: Dominik Rumian <drumian@redhat.com>
+---
+ setup.py | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/setup.py b/setup.py
+index 9c6d881..8c92aae 100755
+--- a/setup.py
++++ b/setup.py
+@@ -34,6 +34,11 @@ install_requires, dep_links = read_requirements(pypi_txt)
+ tests_require, test_dep_links = read_requirements(test_pypi_txt)
+ dep_links += test_dep_links
+
++install_requires = [
++ item for item in install_requires
++ if not item.startswith('koji') and not item.startswith('rpm-py-installer')
++]
++
+ readme_rst = os.path.join(setup_py_path, 'README.rst')
+ with open(readme_rst, 'r') as readme:
+ long_description = readme.read().rstrip()
+--
+2.31.1
+
diff --git a/rpkg.rpmlintrc b/rpkg.rpmlintrc
new file mode 100644
index 0000000..db34bbe
--- /dev/null
+++ b/rpkg.rpmlintrc
@@ -0,0 +1,3 @@
+from Config import *
+
+addFilter('/usr/share/rpkg/examples/cli/')
diff --git a/rpkg.spec b/rpkg.spec
new file mode 100644
index 0000000..60d99d1
--- /dev/null
+++ b/rpkg.spec
@@ -0,0 +1,1498 @@
+Name: rpkg
+Version: 1.66
+Release: 6%{?dist}
+
+Summary: Python library for interacting with rpm+git
+License: GPLv2+ and LGPLv2
+URL: https://pagure.io/rpkg
+BuildArch: noarch
+Source0: https://pagure.io/releases/rpkg/%{name}-%{version}.tar.gz
+
+# RHEL7 is currently the only release that is built for Python 2.
+%if 0%{?rhel} == 7
+%global with_python2 1
+%global with_python3 0
+# sitelib for noarch packages, sitearch for others (remove the unneeded one)
+%{!?__python2: %global __python2 %{__python}}
+%{!?python2_sitelib: %global python2_sitelib %(%{__python2} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")}
+%else
+# Disable python2 build by default
+%global with_python2 0
+# Enable python3 build by default
+%global with_python3 1
+%endif
+
+
+# Fix for bug 1579367
+# Due to https://pagure.io/koji/issue/912, python[23]-koji package does not
+# have egginfo.
+# rpm-py-installer is required as a proxy to install RPM python binding
+# library, so rpm is the actual requirement that must be present in the
+# requires.txt. But, rpkg has to work in all active Fedora and EPEL releases,
+# 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-Do-not-use-pytest-related-dependencies-temporarily.patch
+Patch2: 0002-Remove-pytest-coverage-execution.patch
+%if 0%{?with_python2}
+Patch3: 0003-Remove-Environment-Markers-syntax.patch
+%endif
+Patch4: 0004-Process-source-URLs-with-fragment-in-pre-push-hook.patch
+Patch5: 0005-container-build-update-signing-intent-help-for-OSBS-.patch
+Patch6: 0006-Do-not-generate-pre-push-hook-script-in-some-cases.patch
+Patch7: 0007-More-robust-spec-file-presence-checking.patch
+Patch8: 0008-Update-to-spec-file-presence-checking.patch
+Patch9: 0009-Add-more-information-about-pre-push-hook.patch
+Patch10: 0010-pre-push-check-have-to-use-spectool-with-define.patch
+Patch11: 0011-A-HEAD-query-into-a-lookaside-cache.patch
+Patch12: 0012-pre-push-hook-script-contains-a-user-s-config.patch
+Patch13: 0013-Fix-unittests-for-clone-and-pre-push-hook-script.patch
+Patch14: 0014-import_srpm-allow-pre-generated-srpms.patch
+Patch15: 0015-Ignore-missing-spec-file-in-pre-push-hook.patch
+Patch16: 0016-Check-remote-file-with-correct-hash.patch
+Patch17: 0017-Allow-empty-commits-when-uses_rpmautospec.patch
+Patch18: 0018-Config-file-option-to-skip-the-hook-script-creation.patch
+Patch19: 0019-Pre-push-hook-won-t-check-private-branches.patch
+
+%description
+Python library for interacting with rpm+git
+
+
+%if 0%{?with_python2}
+%package -n python2-%{name}
+Summary: %{summary}
+%{?python_provide:%python_provide python2-%{name}}
+
+BuildRequires: python2-devel
+
+# We br these things for man page generation due to imports
+BuildRequires: rpmlint
+BuildRequires: rpmdevtools
+BuildRequires: python2-koji >= 1.21
+BuildRequires: python2-cccolutils
+BuildRequires: PyYAML
+BuildRequires: GitPython
+BuildRequires: python-pycurl
+BuildRequires: python-requests
+BuildRequires: python-requests-kerberos
+BuildRequires: python-six >= 1.9.0
+BuildRequires: python2-argcomplete
+BuildRequires: python2-mock
+BuildRequires: python2-nose
+BuildRequires: python2-setuptools
+
+Requires: mock
+Requires: redhat-rpm-config
+Requires: rpm-build
+Requires: rpmlint
+Requires: rpmdevtools
+Requires: python2-argcomplete
+Requires: python2-cccolutils
+Requires: python2-koji >= 1.21
+Requires: PyYAML
+Requires: GitPython >= 0.2.0
+Requires: python-pycurl
+Requires: python-requests
+Requires: python-requests-kerberos
+Requires: python-six >= 1.9.0
+Requires: rpm-python
+
+Requires: %{name}-common = %{version}-%{release}
+
+Conflicts: fedpkg < 1.26
+
+# Backward compatibility with capability pyrpkg
+Provides: pyrpkg = %{version}-%{release}
+# All old versions before 1.49-1 should not be used anymore
+Obsoletes: pyrpkg < 1.49-2
+
+
+%description -n python2-%{name}
+A python library for managing RPM package sources in a git repository.
+%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.24
+%if 0%{?rhel}
+BuildRequires: python3-gobject-base
+BuildRequires: libmodulemd
+BuildRequires: python3-requests-kerberos
+%else
+BuildRequires: python3-libmodulemd
+%endif
+BuildRequires: python3-argcomplete
+BuildRequires: python3-cccolutils
+BuildRequires: python3-openidc-client
+BuildRequires: python3-pycurl
+BuildRequires: python3-six >= 1.9.0
+BuildRequires: python3-requests
+BuildRequires: python3-setuptools
+BuildRequires: python3-pytest
+BuildRequires: python3-PyYAML
+BuildRequires: rpmlint
+BuildRequires: rpmdevtools
+
+Requires: mock
+Requires: redhat-rpm-config
+Requires: rpm-build
+Requires: rpmlint
+Requires: rpmdevtools
+
+Requires: python3-argcomplete
+Requires: python3-GitPython >= 0.2.0
+Requires: python3-cccolutils
+Requires: python3-koji >= 1.24
+%if 0%{?rhel}
+Requires: python3-gobject-base
+Requires: libmodulemd
+Requires: python3-requests-kerberos
+%else
+Requires: python3-libmodulemd
+Requires: python3-rpmautospec
+%endif
+Requires: python3-rpm
+Requires: python3-pycurl
+Requires: python3-six >= 1.9.0
+Requires: python3-PyYAML
+
+Requires: %{name}-common = %{version}-%{release}
+
+Conflicts: fedpkg < 1.26
+
+%description -n python3-%{name}
+A python library for managing RPM package sources in a git repository.
+%endif
+# end of python3 section
+
+
+%package common
+Summary: Common files for %{name}
+
+# Files were moved from python2-rpkg in that version
+Conflicts: python2-rpkg < 1.52-2
+Conflicts: pyrpkg < 1.52-2
+
+%description common
+Common files for python2-%{name} and python3-%{name}.
+
+
+%prep
+%autosetup -p1
+
+# Removes section from setup.py that is relevant only for pip and
+# is not compatible with in RHEL-6 tools
+sed -i -n '/extras_require/,/}/!p' setup.py
+
+%build
+%if 0%{?with_python2}
+%{__python2} setup.py build
+%endif
+
+%if 0%{?with_python3}
+%py3_build
+%endif
+
+
+%install
+%if 0%{?with_python2}
+%{__python2} setup.py install -O1 --skip-build --root $RPM_BUILD_ROOT
+%endif
+
+%if 0%{?with_python3}
+%py3_install
+%endif
+
+
+# Create configuration directory to holding downstream clients config files
+# that are built on top of rpkg
+%{__install} -d $RPM_BUILD_ROOT%{_sysconfdir}/rpkg
+
+example_cli_dir=$RPM_BUILD_ROOT%{_datadir}/%{name}/examples/cli
+%{__install} -d $example_cli_dir
+
+# Install example CLI to rpkg own data directory
+%{__install} -d ${example_cli_dir}%{_bindir}
+%{__install} -d ${example_cli_dir}%{_sysconfdir}/bash_completion.d
+%{__install} -d ${example_cli_dir}%{_sysconfdir}/rpkg
+
+%{__install} -p -m 0644 bin/rpkg ${example_cli_dir}%{_bindir}
+%{__install} -p -m 0644 etc/bash_completion.d/rpkg.bash ${example_cli_dir}%{_sysconfdir}/bash_completion.d
+%{__install} -p -m 0644 etc/rpkg/rpkg.conf ${example_cli_dir}%{_sysconfdir}/rpkg
+
+
+%check
+%if 0%{?with_python2}
+%{__python2} -m nose tests
+%endif
+
+%if 0%{?with_python3}
+%pytest
+%endif
+
+
+%if 0%{?with_python2}
+%files -n python2-%{name}
+%doc README.rst CHANGELOG.rst
+%if 0%{?rhel} && 0%{?rhel} < 7
+%doc COPYING COPYING-koji LGPL
+%else
+%license COPYING COPYING-koji LGPL
+%endif
+# For noarch packages: sitelib
+%{python2_sitelib}/pyrpkg
+%{python2_sitelib}/%{name}-%{version}-py*.egg-info
+%endif
+
+%if 0%{?with_python3}
+%files -n python3-%{name}
+%doc README.rst CHANGELOG.rst
+%license COPYING COPYING-koji LGPL
+%{python3_sitelib}/pyrpkg
+%{python3_sitelib}/%{name}-%{version}-py*.egg-info
+%endif
+
+%files common
+%{_datadir}/%{name}
+%{_sysconfdir}/rpkg
+
+
+%changelog
+* Tue Apr 18 2023 Ondřej Nosek <onosek@redhat.com> - 1.66-6
+- Patch: Pre-push hook won't check private branches
+- Patch: Config file option to skip the hook script creation
+- Patch: Allow empty commits when `uses_rpmautospec`
+- Patch: Check remote file with correct hash
+- Patch: Ignore missing spec file in pre-push hook
+- Patch: import_srpm: allow pre-generated srpms
+
+* Sat Apr 1 2023 Ondřej Nosek <onosek@redhat.com> - 1.66-5
+- Patch: Fix unittests for `clone` and pre-push hook script
+- Patch: pre-push hook script contains a user's config
+- Patch: A HEAD query into a lookaside cache
+- Patch: `pre-push-check` have to use spectool with --define
+- Patch: Add more information about pre-push hook
+- Patch: Update to spec file presence checking
+- Patch: More robust spec file presence checking
+
+* Fri Mar 10 2023 Ondřej Nosek <onosek@redhat.com> - 1.66-4
+- Patch: Do not generate pre-push hook script in some cases
+
+* Wed Mar 1 2023 Ondřej Nosek <onosek@redhat.com> - 1.66-3
+- Patch: Process source URLs with fragment in pre-push hook
+- Patch: container-build: update --signing-intent help for OSBS 2
+
+* Tue Feb 21 2023 Ondřej Nosek <onosek@redhat.com> - 1.66-2
+- rebuild for unification of all branches
+
+* Mon Feb 20 2023 Ondřej Nosek <onosek@redhat.com> - 1.66-1
+- container-build: document --compose-ids overrides any new composes (kdreyer)
+- Use srpm when scratch-building from dirty repo - #652 (otto.liljalaakso)
+- Code cleanup in tests/test_cli.py (otto.liljalaakso)
+- Reduce indentation in assert_build helper (otto.liljalaakso)
+- Allow empty commits - 494 (msuchy)
+- Allow forcing download of all sources - #650 (otto.liljalaakso)
+- Add test case for not downloading unused sources (otto.liljalaakso)
+- Support 'results_dir=subdir' when building from srpm - #648
+ (otto.liljalaakso)
+- Use local branch name as release when there is no remote (otto.liljalaakso)
+- Allow downstreams to define a default release (otto.liljalaakso)
+- Switch load_branch_merge to use multiple return (otto.liljalaakso)
+- Unittests for 'git push' hook script (onosek)
+- Checking a repo configuration before 'git push' with a git hook script - 491
+ (onosek)
+- Fix skipping NVR check with autorelease (nils)
+- pyrpkg.spec.SpecFile: More lenient parser for Source/Patch lines (fweimer)
+- Fix URL in CHANGELOG.rst (tmz)
+- Add Jenkinsfile for CI (onosek)
+- mockbuild: escape rpm command under mock - rhbz#2130349 (onosek)
+- Fixes for exploded SRPM layouts - #633 (tdawson)
+- `fedpkg local` does not show rpmbuild output - rhbz#2124809 (onosek)
+
+* Mon Oct 10 2022 Ondřej Nosek <onosek@redhat.com> - 1.65-3
+- Patch: Fixes for exploded SRPM layouts
+- Patch: mockbuild: escape rpm command under mock
+
+* Wed Sep 7 2022 Ondřej Nosek <onosek@redhat.com> - 1.65-2
+- Patch: `fedpkg local` does not show rpmbuild output
+
+* Wed Sep 7 2022 Ondřej Nosek <onosek@redhat.com> - 1.65-1
+- Extra arguments now use shell-escaping - revert (onosek
+- Remove pytest warnings (onosek)
+- Refuse import of packages processed by rpmautospec (zbyszek)
+- follow redirects for lookaside (tkopecek)
+- Repair flake8 complaints (onosek)
+- Fix high level bandit findings (onosek)
+- container-build: improve help text for --compose-ids argument (kdreyer)
+- CONTRIBUTING.md fix links (onosek)
+- Improve change management process documentation (onosek)
+- Removing bandit issues from cli.py (drumian)
+- Extract source RPMs with rpm2archive if possible (praiskup)
+- Set up bandit scanner for rpkg (onosek)
+- Refuse to "commit -c" when using %autochangelog - 454 (drumian)
+- Refactoring loading rpmautospec feature (onosek)
+- add --background option for container-build which allows to create build with
+ lower priority (rcerven)
+- 'clean --dry-run' deprecation warning (drumian)
+- Better exit code for connection error (drumian)
+- Fix generation of optional parameters in man page (mspacek)
+- Use absolute path for mock results in `lint` (onosek)
+- contaner-build does not check for existence of kojisession.buildContainer -
+ 532 (drumian)
+- Fix: 'lint' subcommand should not invoke rpmlint on debuginfo packages -
+ rhbz#2052451 (drumian)
+- Add `--custom-user-metadata` to build command (onosek)
+- Fix: 'lint -i/--info' does not work - rhbz#2016616 (drumian)
+- Fix: AlreadyUploadedError when package has no sources - 604 (drumian)
+- Fix: Extra arguments now use shell-escaping - 587 (drumian)
+
+* Fri Aug 19 2022 Ondřej Nosek <onosek@redhat.com> - 1.64-9
+- Patch: Extract source RPMs with rpm2archive if possible
+
+* Thu Aug 18 2022 Ondřej Nosek <onosek@redhat.com> - 1.64-8
+- Patch: Repair flake8 complaints
+- Patch: follow redirects for lookaside
+
+* Sat Jul 23 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.64-7
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
+
+* Tue Jun 14 2022 Python Maint <python-maint@redhat.com> - 1.64-6
+- Rebuilt for Python 3.11
+
+* Mon Apr 18 2022 Ondřej Nosek <onosek@redhat.com> - 1.64-5
+- Patch: add --background option for container-build which allows
+ to create build
+
+* Tue Apr 05 2022 Ondřej Nosek <onosek@redhat.com> - 1.64-4
+- Patch: Better exit code for connection error
+
+* Fri Mar 18 2022 Ondřej Nosek <onosek@redhat.com> - 1.64-3
+- Patch: Add `--custom-user-metadata` to build command
+
+* Tue Feb 08 2022 Ondřej Nosek <onosek@redhat.com> - 1.64-2
+- Upload correct tarball
+
+* Tue Jan 25 2022 Ondřej Nosek <onosek@redhat.com> - 1.64-1
+- Fix: *pkg now takes into account --path parameter while building SRPM - 580
+ (drumian)
+- 'lint' can run with different 'rpmlint' versions - rhbz#1967821 (onosek)
+- Support building SRPMs in target mock - #495 (onosek)
+- Use unittest.mock on Python 3 (miro)
+- Add support for mockbuild in lint command (oturpe)
+- Fix srpm and binary rpm lookup in lint subcommand - #586 (oturpe)
+- mockbuild: allow enforcing local mock config in fedpkg (praiskup)
+- list-side-tags - fix unavailable username (sergio)
+- Accept also ~/.config/mock/<chroot>.cfg files (praiskup)
+- improve srpm --help description (kdreyer)
+- Improve how the .spec file is selected (mads)
+- Include `fmf` config in the list of reserved files - 452 (psplicha)
+- Fix flake8 syntax (onosek)
+- Continue execution if specfile parsing fails - #583 (oturpe)
+- Consider Patch tags in specfile parser - rhbz#2010518 (oturpe)
+- Support for custom completers (onosek)
+- Fixes import fail with sources already imported - #573 (drumian)
+- Also document Python 3.10 support in the README (miro)
+- Test and support Python 3.10 (miro)
+- Print SpecFile parsing debug info - rhbz#2000556 (onosek)
+- Pass sourcedir to rpmspec when specfile is parsed - #559 (oturpe)
+- Fix unittests to be Python 2 compatible (drumian)
+- Changing escaping of dash in docs - older releases (onosek)
+- Changing escaping of dash in docs. (drumian)
+
+* Fri Jan 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.63-7
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
+
+* Tue Dec 14 2021 Ondřej Nosek <onosek@redhat.com> - 1.63-6
+- drop nosetests for Python3
+- disable pytest coverage during build
+
+* Wed Dec 01 2021 Ondřej Nosek <onosek@redhat.com> - 1.63-5
+- Patch: Continue execution if specfile parsing fails
+- Patch: Consider Patch tags in specfile parser
+
+* Mon Nov 29 2021 Ondřej Nosek <onosek@redhat.com> - 1.63-4
+- Patch: Fixes import fail with sources already imported
+
+* Mon Sep 13 2021 Ondřej Nosek <onosek@redhat.com> - 1.63-3
+- Add python-requests-kerberos as a new dependency for RHEL packages
+- Patch: Print SpecFile parsing debug info
+
+* Wed Sep 01 2021 Ondřej Nosek <onosek@redhat.com> - 1.63-2
+- Patch: Pass sourcedir to rpmspec when specfile is parsed
+
+* Tue Aug 24 2021 Dominik Rumian <drumian@redhat.com> - 1.63-1
+- Do not download unused sources during command 'sources' - #559 (oturpe)
+- Added 'x-pkg verrel' for containers - #547 (jkunstle)
+- container-build: improve help text for --signing-intent argument (kdreyer)
+- Make sure all commits have a proper subject (sgallagh)
+- Fix unittest for previous commit (onosek)
+- better new-sources output when all sources already exist Fixes: #533 JIRA:
+ RHELCMP-5529 (drumian)
+- Added 'remote' to rpkg from rhpkg - 439 (jkunstle)
+- Add --offline cli argument for new-sources (oturpe)
+- Tests: Fix setting branch name with old git (nils)
+- Add and augment tests for rpmautospec (nils)
+- Reflect %autorelease when parsing spec files (nils)
+- Preprocess spec files using rpmautospec features (nils)
+- Detect generic use of rpmautospec features (nils)
+- Fix remaining Python3 SafeConfigParser warnings (nils)
+- Tests: specify branch name on `git init` (nils)
+- Remove leftover deprecated arguments (abisoi)
+- Remove deprecated arguments --dist and --module-name (abisoi)
+- Skip NVR check if the %autorelease macro is used - 109 (nils)
+- Don't access unset variable (nils)
+- Improve help in fedpkg clone command - #367 (abisoi)
+- Fix rpkg container-build ignoring values when same argument is specified
+ multiple times - #537 (abisoi)
+- list-side-tags: show creator of the tag - 358 (onosek)
+- Drop Python 2.6 support (onosek)
+- Enable flatpak tests that require libmodulemd (onosek)
+- Added <package name>.rpmlintrc to the list of files ignored by fedpkg import
+ - rhbz#1946688 (abisoi)
+- Jenkins unittests run in docker container (onosek)
+- Add support for side tag suffix (lsedlar)
+- Check whether sources file is not a directory - #541 (onosek)
+- Add config option for writing dist-git build results to a subdirectory
+ (oturpe)
+- ca cert was removed on koji-1.24.0 (sergio)
+- Improve automatic test suite (oturpe)
+- Better hint when running 'prep' on detached branch - rhbz#1907964 (onosek)
+- Update description of the clean command - rhbz#1909461 (onosek)
+- Add --skip-nvr-check to the scratch-build command - rhbz#1671012 (onosek)
+
+* Fri Jul 23 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.62-7
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
+
+* Thu Jul 08 2021 Ondřej Nosek <onosek@redhat.com> - 1.62-6
+- Patch: Preprocess spec files using rpmautospec features and use %%autorelease when parsing spec files
+- Patch: Skip NVR check if the %%autorelease macro is used
+
+* Fri Jun 04 2021 Python Maint <python-maint@redhat.com> - 1.62-5
+- Rebuilt for Python 3.10
+
+* Fri Apr 02 2021 Ondřej Nosek <onosek@redhat.com> - 1.62-4
+- Patch: Add support for side tag suffix
+
+* Wed Feb 24 2021 Ondřej Nosek <onosek@redhat.com> - 1.62-3
+- Patch: ca cert was removed on koji-1.24.0
+
+* Wed Jan 27 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.62-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
+
+* Wed Dec 02 2020 Ondřej Nosek <onosek@redhat.com> - 1.62-1
+- Allow skipping nvr checking for chain-build - rhbz#1890701 (onosek)
+- Code-style improvement - imports are sorted (onosek)
+- Fix Jenkinks tests (onosek)
+- Avoid blank lines in log files for lookaside (contyk)
+- container-build: fix help text for --isolated argument (kdreyer)
+- Add --signing-intent and --repo-url to 'flatpak-build' (otaylor)
+- Add hashtype to lookaside download path - #521 (turivniy)
+- Add new layout for packages that missing specfile - rhbz#1885771 (onosek)
+
+* Mon Sep 07 2020 Ondřej Nosek <onosek@redhat.com> - 1.61-1
+- Pytest update and MANIFEST.in prune (onosek)
+- Re-enable clog tests (onosek)
+- Skip directories inside of imported srpm file - rhbz#1866297 (onosek)
+- Skip 'sources' file when it is missing - rhbz#1867440 (onosek)
+- New layout for retired packages - rhbz#1867822 (onosek)
+- added a extendable layout module to deal with different package layouts
+ within the CLI (2183506+odra)
+- Add (onosek)
+- Pytest replaces nosetests - #501 (onosek)
+- Disable some test for 'clog' functionality (onosek)
+- Suggest a way to track remote branch - update (onosek)
+- Suggest a way to track remote branch in the error log (cqi)
+- Remove deprecated support for kojiconfig (onosek)
+- Switch from krb_login to gssapi_login - rhbz#1830430 (onosek)
+- Disable test method's docstring in nosetests list (onosek)
+- Check repo name for correct format (onosek)
+- Unittests for passing additional arguments (onosek)
+- Passing additional arguments to underlaying commands - #432 (onosek)
+- Updated supported plaforms in documentation (onosek)
+- Repair compatible formatting for Python 2.6 (onosek)
+- Repair downloading sources into external directory (onosek)
+
+* Mon Aug 31 2020 Ondřej Nosek <onosek@redhat.com> - 1.60-8
+- Patch: Skip 'sources' file when it is missing
+
+* Fri Aug 07 2020 Ondřej Nosek <onosek@redhat.com> - 1.60-7
+- Patch: added layout module to deal with different package layouts
+- Patch: clog tests workaround
+
+* Sat Aug 01 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.60-6
+- Second attempt - Rebuilt for
+ https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Wed Jul 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.60-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Mon May 25 2020 Miro Hrončok <mhroncok@redhat.com> - 1.60-4
+- Rebuilt for Python 3.9
+
+* Tue May 19 2020 Ondřej Nosek <onosek@redhat.com> - 1.60-3
+- Patch: Switch from krb_login to gssapi_login
+
+* Mon May 11 2020 Ondřej Nosek <onosek@redhat.com> - 1.60-2
+- Releasing the epel8 version
+
+* Fri Mar 20 2020 Ondřej Nosek <onosek@redhat.com> - 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 <releng@fedoraproject.org> - 1.59-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
+
+* Thu Jan 02 2020 Ondřej Nosek <onosek@redhat.com> - 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 <onosek@redhat.com> - 1.59-4
+- Patch: limited thread pool for watching module builds
+
+* Thu Nov 14 2019 Ondřej Nosek <onosek@redhat.com> - 1.59-3
+- Backport: Isolated container-build should allow arches override
+
+* Fri Oct 25 2019 Ondrej Nosek <onosek@redhat.com> - 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 <onosek@redhat.com> - 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 <onosek@redhat.com> - 1.58-10
+- Update koji dependency
+
+* Sat Aug 17 2019 Miro Hrončok <mhroncok@redhat.com> - 1.58-9
+- Rebuilt for Python 3.8
+
+* Thu Aug 01 2019 Ondřej Nosek <onosek@redhat.com> - 1.58-8
+- Obsoletes python2-rpkg after upgrade to Fedora30
+
+* Wed Jul 31 2019 Stephen Gallagher <sgallagh@redhat.com> - 1.58-7
+- Fix libmodulemd requirements
+
+* Fri Jul 26 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.58-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
+
+* Mon Jun 10 2019 Ondřej Nosek <onosek@redhat.com> - 1.58-5
+- Now again, libmodulemd is required instead of python3-libmodulemd because
+ it was causing troubles with upgrades.
+
+* Mon Jun 10 2019 Ondřej Nosek <onosek@redhat.com> - 1.58-4
+- Modify required version of koji package
+
+* Mon May 27 2019 Ondřej Nosek <onosek@redhat.com> - 1.58-3
+- Backport: Custom handler for koji watch_tasks
+- Backport: Show nvr in container-build
+- Backport: Different import --offline command behavior
+
+* Thu May 09 2019 Ondrej Nosek <onosek@redhat.com> - 1.58-2
+- Backport: fixed 'clone --branch' command
+
+* Mon Apr 29 2019 Ondřej Nosek <onosek@redhat.com> - 1.58-1
+- Ignore files in a cloned repository - #355 (onosek)
+- Handle data from python RPM binding as UTF-8 string (zebob.m)
+- srpm_import: be compatible with rhbz#1693751 (praiskup)
+- Pass --enable-network to mock - 314 (onosek)
+- Enhance 'module-overview' sub-command to show scratch status of modules.
+ (mmathesi)
+- Remove the ability to parse a module's branch automatically to determine the
+ base module stream override (mprahl)
+- Improvements for scratch module builds (mmathesi)
+- Updates to support scratch module builds (mmathesi)
+- Refactor fake Koji credential handling from TestBuildPackage class into new
+ FakeKojiCreds class so it can be shared with TestModulesCli class. (mmathesi)
+- Make Koji upload methods more generic so they can be reused. (mmathesi)
+- Allow passing --offline and -r to mbs-manager build_module_locally. (jkaluza)
+- Depth param for clone - tuning (onosek)
+- Depth param for clone - #363 (onosek)
+- Pass --disablerepo and --enablerepo to mock - 313 (onosek)
+- Import srpm without uploading sources - rhbz#1175262 (onosek)
+- Ignore any specified profile when finding the Flatpak build target (otaylor)
+- Show module build links in output from command module-build (cqi)
+- Add 'retire' command supporting both packages and modules (mmathesi)
+- Fix "push --force" (tim)
+- Container-build returns its status to command-line - #415 (onosek)
+- Upload .crate files to lookaside cache - 312 (onosek)
+- Restrict version of PyYAML on Python 2.6 (lsedlar)
+- Simplify srpm method (onosek)
+- Permit setting arbitrary rpm macros during build (riehecky)
+- Add the ability to configure multiple regex expressions for
+ base_module_stream_regex_from_branch (mprahl)
+- Do not require PyGObject in setup.py - rhbz#1679365 (onosek)
+- Fixing failing Jenkins tests (onosek)
+- Unify update-docs script with fedpkg version (onosek)
+- README: add links (onosek)
+- Watch multiple module builds (cqi)
+- Added update-docs script (onosek)
+
+* Thu Apr 25 2019 Ondřej Nosek <onosek@redhat.com> - 1.57-9
+- yet another compat fix with RPM after rhbz#1693751
+
+* Fri Apr 19 2019 Pavel Raiskup <praiskup@redhat.com> - 1.57-8
+- compat fix with RPM after rhbz#1693751
+
+* Wed Mar 20 2019 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 1.57-7
+- Backport patch for uploading *.crate into lookaside
+
+* Thu Feb 07 2019 Ondřej Nosek <onosek@redhat.com> - 1.57-6
+- Revert previous change.
+ Now python-gobject-base & libmodulemd are removed from epel7 and RHEL7
+
+* Tue Feb 05 2019 Ondřej Nosek <onosek@redhat.com> - 1.57-5
+- python-gobject-base & libmodulemd also for epel7 and RHEL7
+
+* Mon Feb 04 2019 Lubomír Sedlář <lsedlar@redhat.com> - 1.57-4
+- Disable Py2 package on F30+
+
+* Sat Feb 02 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.57-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
+
+* Thu Jan 03 2019 Ondřej Nosek <onosek@redhat.com> - 1.57-2
+- Merge changes of the .spec files for Fedora and RHEL
+
+* Thu Dec 13 2018 Ondřej Nosek <onosek@redhat.com> - 1.57-1
+- Use idna 2.7 for Python 2.6 (lsedlar)
+- Imports are sorted (onosek)
+- libmodulemd is missing on el7 - #402 (onosek)
+- Initialize bash autocompletion (onosek)
+- Set configuration in case of "clone --branches" as well (tim)
+- Fix fake spec file for clog tests (cqi)
+- Move argparse fix from fedpkg - #398 (onosek)
+- Send source mtime to dist-git - 220 (lsedlar)
+- Fix tests for mock package manager (lsedlar)
+- Specify package manager for mock-config (lsedlar)
+- Add contributing guide (onosek)
+- Validate the module build optional argument when parsing the argument
+ (mprahl)
+- Add config options to parse the base module (e.g. platform) stream from the
+ dist-git branch and apply a buildrequire override (mprahl)
+- Add the ability to pass in buildrequire and require overrides on a module
+ build (mprahl)
+- Raise an error if the module build command receives optional arguments that
+ conflict (mprahl)
+- Silence Python3 SafeConfigParser warnings (mmathesi)
+- Allow to pass posargs to tox from make (cqi)
+- Specify dependent packages in one place (cqi)
+- Don't registry flatpak-build command on Python-2.6 (otaylor)
+- Add flatpak-build subcommand (otaylor)
+- Don't pass the MBS API URL around as a parameter (otaylor)
+- TestContainerBuildWithKoji: tear down the mock appropriately (otaylor)
+- Refine test runner for py26 (cqi)
+
+* Thu Nov 15 2018 Ondřej Nosek <onosek@redhat.com> - 1.56-4
+- Allow build for RHEL-8 (onosek)
+
+* Wed Nov 14 2018 Ondřej Nosek <onosek@redhat.com> - 1.56-3
+- No mock warning (onosek)
+
+* Fri Sep 7 2018 Owen Taylor <otaylor@redhat.com> - 1.56-2
+- Add patch from upstream pull-request to add a flatpak-build subcommand
+- Add PyYAML dependencies so that the spec file at least builds on epel6/epel7
+
+* Tue Aug 21 2018 Chenxiong Qi <cqi@redhat.com> - 1.56-1
+- Validate greenwave policy early in Commands.build (cqi)
+- Refine error message for failure gating.yaml validation (cqi)
+- explain mbs-manager exception handling (nils)
+- test for missing mbs-manager with errno set (nils)
+- catch errno == ENOENT if mbs-manager is missing (nils)
+- add missing method docstring (nils)
+- Show full error from MBS (lsedlar)
+- Fix tests for greenwave policy validation (cqi)
+- Add testenv for building docs (cqi)
+- New option --buildrootdir - rhbz#1583822 (cqi)
+- Add --shell option to mockbuild - rhbz#1438685 (cqi)
+- Validate gating.yaml file for Greenwave gating (gnaponie)
+- Update README (cqi)
+- Reduce the number of repo creation for tests (cqi)
+- Fix flake8 error (cqi)
+- Drop rpm-py-installer from requires - #357 (cqi)
+- Allow _run_command to capture and return output to stdout or stderr (cqi)
+- Claim Python 3.7 in README and package classifiers (cqi)
+- Fix a bad test teardown (otaylor)
+- Refactor build command (cqi)
+- Remove rpmfluff package (cqi)
+- Set PYCURL_SSL_LIBRARY directly for installing pycurl (cqi)
+- Add py37 testenv (cqi)
+
+* Thu Jul 26 2018 Chenxiong Qi <cqi@redhat.com> - 1.55-2
+- Remove dependency python-rpmfluff
+
+* Mon Jul 23 2018 Chenxiong Qi <cqi@redhat.com> - 1.55-1
+- Fix installing pycurl for running tests (cqi)
+- Replace extra module_name with repo_name (cqi)
+- Replace name module with repo in tests/fixtures/rpkg*.conf (cqi)
+- Add --fail-fast functionality - #331 (tibbs)
+- Fix fake spec for build in rawhide (cqi)
+- Avoid to upload a file with different checksum - #204 (cqi)
+- Give more information when sources has invalid content - #227 (cqi)
+- Reserve README.md while import srpm - #149 (cqi)
+- Set to repo_name property when --name is specified (cqi)
+- Do not restrict argparse version (cqi)
+- Check old format args only if there is clone config (cqi)
+- Fix typo and reword option help and deprecation message (cqi)
+- Massive replacement of module (cqi)
+- Deprecate module_name inside rpkg internal (cqi)
+- Add new option --name and --namespace - #301 (cqi)
+- Man generator indent workaround (onosek)
+- Fixing imports in unittests (onosek)
+- Minor fixes to doc build (cqi)
+- Fix mistakes during rebase (cqi)
+- Run document generator script in Py3 explictly (cqi)
+- Remove warning of nonexisting source/_static/ during doc build (cqi)
+- Do not generate document for sample rpkg app (cqi)
+- Exclude subcommand which does not have help (cqi)
+- Ensure to clean files for generating HTML documents (cqi)
+- Fix rebase error: add module_build_watch back (cqi)
+- Fix MANIFEST.in to list files for building doc (cqi)
+- Rename generate_man_pages.py (cqi)
+- Generate HTML document and manpage for sample rpkg (cqi)
+- Simplify doc Makefile (cqi)
+- Generate commands HTML and man pages (cqi)
+- Update existing docstrings (cqi)
+- Generate documents by sphinx - #50 (cqi)
+- README: new code should be py3 compatible (ktdreyer)
+- Provide base_module to clone_config templates - #326 (tmz)
+- Refactor man generator to be reusable (puiterwijk)
+- Make sure gitcred doesn't land in man (puiterwijk)
+- Don't inject the credential helper to push if OIDC is unconfigured
+ (puiterwijk)
+- Add docblocks to gitcred methods and don't quit if OpenIDC is unconfigured
+ (puiterwijk)
+- Also inject the credential helper with rpkg push (puiterwijk)
+- Create a "gitcred" command that functions as an OIDC git-credential helper
+ (puiterwijk)
+
+* Sat Jul 14 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.54-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
+
+* Tue Jun 19 2018 Miro Hrončok <mhroncok@redhat.com> - 1.54-3
+- Rebuilt for Python 3.7
+
+* Mon May 21 2018 Chenxiong Qi <cqi@redhat.com> - 1.54-2
+- Remove koji and rpm-py-installer Python package requires
+- Fix argparse version for el6
+
+* Fri May 11 2018 Chenxiong Qi <cqi@redhat.com> - 1.54-1
+- Pass the -s/--set-default-stream to mbs-manager for module local builds.
+ (jkaluza)
+- Write mock config correctly when run in Py 3 (cqi)
+- Add --with and --without options to 'local' - rhbz#1533416 (tmz)
+- Add a test for 3f93433 (cqi)
+- Raise error if rpm command returns non-zero (cqi)
+- Use getpass.getuser() instead of pwd.getpwuid(os.getuid())[0] (jpopelka)
+- Allow setting custom MBS config file and config section in rpkg.conf.
+ (jkaluza)
+- Remove py35 testenv (cqi)
+- Ignore .env and tags (cqi)
+- Remove question mark from giturl (cqi)
+- Added custom ArgumentParser (supports allow_abbrev) (jkucera)
+- Grab the correct first line in case of rpm output (zebob.m)
+
+* Mon Apr 16 2018 Chenxiong Qi <cqi@redhat.com> - 1.53-2
+- Require python2-koji 1.15 as the minimum version
+- Refine BuildRequires
+
+* Tue Apr 10 2018 Chenxiong Qi <cqi@redhat.com> - 1.53-1
+- Use NSVs and not build IDs with module-build-local --add-local-build (mprahl)
+- Fix docstring of test_module_build_local_with_skiptests (mprahl)
+- Add long_description to package (cqi)
+- Support local module builds when there are uncommitted changes (mprahl)
+- Fix clarifying error that occurs when mbs-manager is not installed (mprahl)
+- Add support for Module Stream Expansion (MBS API v2) (mprahl)
+- Show errors when a module build fails (mprahl)
+- Move full download url construction to separate method (frostyx)
+- Fix compose related params for container-build (lucarval)
+- Avoid calling /usr/bin/python in tests (miro)
+- Change default rpmlint configuration file (athoscr)
+- Use koji.grab_session_options() rather than opencoding it (cfergeau)
+
+* Mon Mar 05 2018 Miro Hrončok <mhroncok@redhat.com> - 1.52-2
+- Introduce python3 subpackage
+
+* Thu Feb 22 2018 Chenxiong Qi <cqi@redhat.com> - 1.52-1
+- Mock ThreadPool in test_module_overview (cqi)
+- Drop rpmfluff in test (cqi)
+- Fix hardcoded directory name in test (lsedlar)
+- Improve testenv for py26 (cqi)
+- Run tests with old GitPython in py26 testenv (cqi)
+- Compile pycurl with openssl after F27 (cqi)
+- Ignore .egg/ from git (cqi)
+- Add py26 to testenv (cqi)
+- Install koji from PyPI (cqi)
+- Make compose-id and repo-url to take one or more values (csomh)
+- Let git ignore more directories (cqi)
+- Exclude pyc and __pycache__ globally in sdist (cqi)
+- Handle nonexisting mbs-manager (cqi)
+- Add dependent packages for Python 2.6 in setup.py (cqi)
+- Updated module cli API (mcurlej)
+- Declare Python versions rpkg can work with - #278 (cqi)
+- Fix flake8 errors (cqi)
+- Fix tests that do not work with Python 3 (cqi)
+- Fix tests: not impact by dict.items call (cqi)
+- Add py36 to testenv - #274 (cqi)
+- Run tox to run tests and check code styles - #276 (cqi)
+- Use flake8 3.5.0 (cqi)
+- Add files under requirements/ to sdist package (cqi)
+- Install Koji shared library via setuptools (cqi)
+- Set install and tests requires in setup.py (cqi)
+- Split pypi requirements and refine versions (cqi)
+- Change type of compose id from string to int (bfontecc)
+- Install RPM Python binding from PyPI (cqi)
+- Fix test test_lint_each_file_once (cqi)
+- Add compose-id and signing-intent arguments (bfontecc)
+- Use env's python (lucarval)
+- Use progress callback and TaskWatcher from koji_cli.lib (cqi)
+- Get buildhash from git+https:// url (lsedlar)
+- lint: Avoid checking rpm's multiple times (tmz)
+- Fix giturl as well by calling construct_build_url (cqi)
+- Fix construct anongiturl for chain-build (cqi)
+- Fix mock openidc_client (cqi)
+
+* Fri Feb 09 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.51-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
+
+* Tue Jan 23 2018 Chenxiong Qi <cqi@redhat.com> - 1.51-3
+- Backport: Add compose-id and signing-intent arguments
+- Backport: Change type of compose id from string to int
+
+* Wed Nov 08 2017 Chenxiong Qi <cqi@redhat.com> - 1.51-2
+- Backport: Fix construct anongiturl for chain-build
+- Backport: Fix giturl as well by calling construct_build_url
+
+* Fri Oct 20 2017 Chenxiong Qi <cqi@redhat.com> - 1.51-1
+- Ignore TestModulesCli if openidc-client is unavailable (cqi)
+- Port mbs-build to rpkg (mprahl)
+- Add .vscode to .gitignore (mprahl)
+- Fix TestPatch.test_rediff in order to run with old version of mock (cqi)
+- Allow to specify alternative Copr config file - #184 (cqi)
+- Tests for patch command (cqi)
+- More Tests for mockbuild command (cqi)
+- More tests for getting spec file (cqi)
+- Tests for container-build-setup command (cqi)
+- Test for container-build to use custom config (cqi)
+- Suppress output from git command within setUp (cqi)
+- Skip test if rpmfluff is not available (lsedlar)
+- Allow to override build URL (cqi)
+- Test for mock-config command (cqi)
+- Tests for copr-build command (cqi)
+- Fix arch-override for container-build (lucarval)
+- Remove unsupported osbs for container-build (lucarval)
+- cli: add --arches support for koji_cointainerbuild (mlangsdo)
+- Strip refs/heads/ from branch only once (lsedlar)
+- Don't install bin and config files (cqi)
+- Fix kojiprofile selection in cliClient.container_build_koji (cqi)
+- Avoid branch detection for 'rpkg sources' (praiskup)
+- Fix encoding in new command (cqi)
+- Minor wording improvement in help (pgier)
+- Fix indentation (pviktori)
+- Add --with and --without options to mockbuild (pviktori)
+
+* Thu Aug 31 2017 Chenxiong Qi <cqi@redhat.com> - 1.50-2
+- Backport: Fix kojiprofile selection in cliClient.container_build_koji (cqi)
+
+* Thu Aug 10 2017 Chenxiong Qi <cqi@redhat.com> - 1.50-1
+- Fix PEP8 error (cqi)
+- Spelling fixes (ville.skytta)
+- Reword help and description of new-sources and upload commands - rhbz#1248737
+ (cqi)
+- Set autorebuild enabled by default (bfontecc)
+- Add commands to whitelist_externals (cqi)
+- Declare Python 3 versions to support in setup.py (cqi)
+- Replace unicode with six.text_type (cqi)
+- Run tests in both Python 2 and 3 with tox (cqi)
+- Make tests and covered code compatible with Py3 (cqi)
+- Add requirements files (cqi)
+- Do not build srpm in test (cqi)
+- Do not actually run git-diff in tests (cqi)
+- Remove deprecated modules used in koji (cqi)
+- Non-zero exit when rpmbuild fails in local command (cqi)
+- Report deprecation of config via logger (lsedlar)
+- Print --dist deprecation warning explicitly (lsedlar)
+- utils: Avoid DeprecationWarning for messages for users (lsedlar)
+- Supply namespace to lookaside (if enabled) (lsedlar)
+- Support reading koji config from profile - #187 (cqi)
+- Remove kitchen (cqi)
+- Fix string format (cqi)
+- Recommend --release instead of --dist in mockbuild --help (tmz)
+- Allow overriding container build target by downstream (lsedlar)
+- Add a separate property for namespace (lsedlar)
+- Allow container builds from any namespace (maxamillion)
+- Make osbs support optional (cqi)
+- make osbs dependency optional (pavlix)
+- Allow explicit namespaces with slashes (lsedlar)
+- Do not hang indefinitely when lookaside cache server stops sending data
+ (jkaluza)
+- Make --module-name work with namespaces - #216 (lsedlar)
+- Include README.rst in dist package (cqi)
+- More document in README - #189 (cqi)
+- Make new command be able to print unicode - #205 (cqi)
+- Allow to specify custom info to a dummy commit (cqi)
+- Load module name correctly even if push url ends in slash - #192 (cqi)
+- Replace fedorahosted.org with pagure.io - #202 (cqi)
+- Fix rpm command to get changelog from SPEC - rhbz#1412224 (cqi)
+- Rewrite tests to avoid running rpmbuild and rpmlint (cqi)
+- Use fake value to make Command in test (cqi)
+- Python 3.6 invalid escape sequence deprecation fixes (ville.skytta)
+
+* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.49-7
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
+* Mon Jul 10 2017 Chenxiong Qi <cqi@redhat.com> - 1.49-6
+- Rename koji to python2-koji
+
+* Thu Jun 29 2017 Lubomír Sedlář <lsedlar@redhat.com> - 1.49-5
+- Allow using namespace in --module-name attribute
+
+* Thu Jun 22 2017 Chenxiong Qi <cqi@redhat.com> - 1.49-4
+- Remove python-osbs-client
+
+* Fri Jun 16 2017 Chenxiong Qi <cqi@redhat.com> - 1.49-3
+- Backport to make osbs optional
+
+* Mon Mar 27 2017 Chenxiong Qi <cqi@redhat.com> - 1.49-2
+- Rebuilt to rename pyrpkg to python2-rpkg
+
+* Wed Feb 22 2017 Chenxiong Qi <cqi@redhat.com> - 1.49-1
+- More upload PyCURL fixes for EL 7 (merlin)
+- Move tag inheritance check into a separate method (cqi)
+
+* Sat Feb 11 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.48-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
+
+* Wed Feb 1 2017 Lubomír Sedlář <lsedlar@redhat.com> - 1.48-2
+- Backport patch to move tag inheritance check to separate method
+
+* Thu Dec 22 2016 Chenxiong Qi <cqi@redhat.com> - 1.48-1
+- Better message when fail to authenticate via Kerberos - #180 (cqi)
+
+* Mon Dec 19 2016 Chenxiong Qi <cqi@redhat.com> - 1.47-7
+- Refactor Commands._srpmdetails (cqi)
+
+* Thu Dec 15 2016 Chenxiong Qi <cqi@redhat.com> - 1.47-6
+- Add missing import koji.ssl.SSLCommon - BZ#1404102 (cqi)
+- Fix upload with old PyCURL - BZ#1241059 (lsedlar)
+
+* Mon Dec 12 2016 Lubomír Sedlář <lsedlar@redhat.com> - 1.47-5
+- Fix default value for krb_rdns options
+
+* Mon Dec 12 2016 Lubomír Sedlář <lsedlar@redhat.com> - 1.47-4
+- Add krb_rdns koji config
+
+* Thu Dec 08 2016 Lubomír Sedlář <lsedlar@redhat.com> - 1.47-3
+- Conflict with too old fedpkg
+
+* Wed Dec 07 2016 Chenxiong Qi <cqi@redhat.com> - 1.47-2
+- Fix test that fails on a Koji ARM builder
+
+* Fri Dec 02 2016 Chenxiong Qi <cqi@redhat.com> - 1.47-1
+- New upstream release 1.47
+
+* Tue Oct 25 2016 Lubomír Sedlář <lsedlar@redhat.com> - 1.46-5
+- Allow using gssapi for lookaside caches
+
+* Tue Sep 06 2016 Lubomír Sedlář <lsedlar@redhat.com> - 1.46-4
+- Update dependencies for python-argparse and python-hashlib
+
+* Thu Aug 25 2016 Chenxiong Qi <cqi@redhat.com> - 1.46-3
+- python-six-1.9.0 is the minimum version rpkg depends
+
+* Tue Jul 19 2016 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.46-2
+- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages
+
+* Fri Jul 15 2016 Chenxiong Qi <cqi@redhat.com> - 1.46-1
+- Warning untracked patches when push (cqi)
+- handle correct spec path when push from outside the repo (cqi)
+- Remove support for BuildContainer release task opt (lucarval)
+
+* Mon Jun 27 2016 Chenxiong Qi <cqi@redhat.com> - 1.45-2
+- Depend on python-six to be compatible with Python 3
+
+* Mon Jun 27 2016 Chenxiong Qi <cqi@redhat.com> - 1.45-1
+- add missing git-config in the git repo for testing (cqi)
+- Don't print download/upload progress outside of TTY (lsedlar)
+- Merge #58 `Rebase of #28 with conflict resolved` (cqi)
+- Get correct login without TTY (vgologuz)
+- Merge #63 `More Python 3 compatibility fixes` (lubomir.sedlar)
+- fix broken when non-ASCII in path (cqi)
+- More Python 3 compatibility fixes (ville.skytta)
+- Fix push called without argument (lsedlar)
+- Use logging.warning instead of deprecated logging.warn (ville.skytta)
+- Use assertEqual instead of deprecated assertEquals (ville.skytta)
+- Spelling fixes (ville.skytta)
+- Add missing dependencies to setup.py (ville.skytta)
+- Add tests for cloning with a namespace (lsedlar)
+- Fix cloning with -B and namespaced module (lsedlar)
+- Adjust figuring out the path of the git repo cloned (pingou)
+- Only clone into the bare_dir if no target was specified (pingou)
+- Add to the CLI the possibility to specify a target folder for the clone
+ (pingou)
+- Add unit-tests for cloning into a specified directory (pingou)
+- Let rpkg support cloning into a specified directory (pingou)
+- Python 3 fixes (ville.skytta)
+- rewrite test_commands.setup_module using git (cqi)
+- Merge #40 `push: check for missing patches` (lubomir.sedlar)
+
+* Thu Jun 02 2016 Lubomír Sedlář <lsedlar@redhat.com> - 1.44-1
+- Log container-build task results (lucarval)
+- Add support for BuildContainer release task opt (lucarval)
+- handle exception from getTaskInfo correctly (cqi)
+- fix failure of test_load_spec_where_path_contains_space on RHEL (cqi)
+- allow space appearing in path to cloned repo (cqi)
+- fix docstring of Commands.compile (cqi)
+- Make 'Failed to get ns_module_name from Git url or pushurl' message a warning
+ (issue #42) (orion)
+- pyrpkg: use git remote get-url --push (mathstuf)
+
+* Wed Mar 23 2016 Lubomír Sedlář <lubomir.sedlar@gmail.com> - 1.43-1
+- Print warning when using old git configuration (lsedlar)
+- Add rpms namespace for checkouts without namespace (lsedlar)
+
+* Wed Mar 16 2016 Lubomír Sedlář <lubomir.sedlar@gmail.com> - 1.42-1
+- Fix problems with namespacing (maxamillion)
+
+* Mon Mar 14 2016 Lubomír Sedlář <lubomir.sedlar@gmail.com> - 1.41-2
+- Depend on python-osbs directly to avoid python3
+
+* Mon Mar 14 2016 Lubomír Sedlář <lubomir.sedlar@gmail.com> - 1.41-1
+- Update upstream URL (lsedlar)
+- Fixes based on lsedlar's feedback (maxamillion)
+- add distgit namespacing for non-rpm content (docker, xdg-app, etc) (maxamillion)
+- Container-build: dont't allow to build with unpushed changes (araszka)
+- Suggest --dist option when can't get OS ver from branch (araszka)
+- fix: print all tags without filter (araszka)
+- Fix lookaside upload when --path is specified (araszka)
+- Lookaside: encoding repo name to UTF-8 (araszka)
+- Fix errors on Python 2.6 (lsedlar)
+- Add test and docstring to byte offset convertor (araszka)
+- Decode .spec file with UTF-8 (araszka)
+- 1271741 - add copr command (Recommends: copr-cli) (msuchy)
+- Suggest --target option when unknown target (araszka)
+
+* Thu Feb 04 2016 Fedora Release Engineering <releng@fedoraproject.org> - 1.40-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
+
+* Fri Oct 23 2015 Pavol Babincak <pbabinca@redhat.com> - 1.40-1
+- don't use assertRaises (ttomecek)
+- refactor test_clone: set clone config in the same test file (pbabinca)
+- Fix clone test to not use constructor to set clone_config (pbabinca)
+- Fix test clone test (pbabinca)
+- Make use of clone_config attribute backwards compatible (pbabinca)
+
+* Thu Oct 22 2015 Pavol Babincak <pbabinca@redhat.com> - 1.39-1
+- Replace deprecated BaseException.message with str(BaseException) (pbabinca)
+- Don't print exception message during check repo tests (pbabinca)
+- Add support for setting post-clone git config (ville.skytta)
+
+* Wed Oct 21 2015 Pavol Babincak <pbabinca@redhat.com> - 1.38-1
+- Fix parse error (pbabinca)
+
+* Wed Oct 21 2015 Pavol Babincak <pbabinca@redhat.com> - 1.37-1
+- Add support for --nocheck (orion)
+- container-build: check repo (ttomecek)
+- move repo checking to a method (ttomecek)
+- Add 'oxt' and 'xpi' extensions to UPLOADEXTS (dsilakov)
+- Switch-branch: give more info about error (araszka)
+- Recognize binary files with .oxt and .xpi extensions (dsilakov)
+- Container-build: add --nowait option (araszka)
+- bash autocompletion: support for command container-build-config (pbabinca)
+- Implement getter for autorebuild value, use 'true' and 'false' for values
+ (bkabrda)
+- Add a command and option to change container build setup (bkabrda)
+- Edit tests for python2.6 - EL6 (araszka)
+- tests: Don't use assertNotIn (araszka)
+- tests: Don't use assertRaises as context manager (araszka)
+- tests: Don't use check_output (araszka)
+- Typo in import --help descriptions (araszka)
+- change the url for rpkg (dennis)
+
+* Wed Jul 15 2015 Pavol Babincak <pbabinca@redhat.com> - 1.36-1
+- container-build: support yum repos with --build-with=koji (pbabinca)
+- container-build: move --scratch option to koji group (pbabinca)
+- Print task info for container-build (pbabinca)
+
+* Thu Jun 18 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.35-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
+
+* Tue May 26 2015 Dennis Gilmore <dennis@ausil.us> - 1.35-2
+- pyrpkg Requires python-osbs
+
+* Tue May 26 2015 Pavol Babincak <pbabinca@redhat.com> - 1.35-1
+- Test for scratch opt in the actual argument of container_build_koji
+ (pbabinca)
+- Move the GitIgnore class to its own module (bochecha)
+- Modernize the gitignore-handling code (bochecha)
+- gitignore: Properly handle adding matching lines (bochecha)
+- Refactor: remove unnecessary code (pbabinca)
+- Move custom UnknownTargetError to errors module (pbabinca)
+- New command: container-build (jluza)
+- lookaside: Take over file uploads (bochecha)
+- Remove unnecessary log message (bochecha)
+- Stop making source files read-only (bochecha)
+- Drop some useless comments (bochecha)
+- Only report we're uploading when we actually are (bochecha)
+- lookaside: Check if a file already was uploaded (bochecha)
+- lookaside: Allow client-side and custom CA certificates (bochecha)
+- lookaside: Be more flexible when building the download URL (bochecha)
+- lookaside: Use the hashtype for the URL interpolation (bochecha)
+- lookaside: Add a progress callback (bochecha)
+- lookaside: Handle downloading of source files (bochecha)
+- lookaside: Move handling of file verification (bochecha)
+- lookaside: Move handling of file hashing (bochecha)
+- utils: Add a new warn_deprecated helper (bochecha)
+- Add a new lookaside module (bochecha)
+- Add a new utils module (bochecha)
+- Properly set the logger (bochecha)
+- Move our custom errors to their own module (bochecha)
+- Don't assume MD5 for the lookaside cache (bochecha)
+- Remove dead code (bochecha)
+- Use the proper exception syntax (bochecha)
+
+* Thu Apr 16 2015 Pavol Babincak <pbabinca@redhat.com> - 1.34-1
+- tests: Don't use assertIsNone (bochecha)
+- tests: Don't use assertRaises as a context manager (bochecha)
+- Add long --verbose option to -v, new --debug and -d option (pbabinca)
+
+* Mon Apr 13 2015 Pavol Babincak <pbabinca@redhat.com> - 1.33-1
+- New mockbuild options: --no-clean --no-cleanup-after (jskarvad)
+- Catch ssl auth problems and print more helpful messages (pbabinca)
+- New exception - rpkgAuthError to allow clients detect auth problems
+ (pbabinca)
+
+* Mon Mar 23 2015 Pavol Babincak <pbabinca@redhat.com> - 1.32-1
+- tests: Properly open/close the file (bochecha)
+- sources: Support writing in either the old or new format (bochecha)
+- sources: Reindent code (bochecha)
+
+* Fri Mar 06 2015 Pavol Babincak <pbabinca@redhat.com> - 1.31-1
+- Refactor: remove unused imports from test_sources (pbabinca)
+- Don't do several times the same thing (bochecha)
+- sources: Forbid mixing hash types (bochecha)
+- sources: Move to the new file format (bochecha)
+- Rewrite the sources module (bochecha)
+
+* Wed Dec 03 2014 Pavol Babincak <pbabinca@redhat.com> - 1.30-2
+- Use %%{__python} instead of %%{__python2} as it might be not defined
+
+* Wed Oct 08 2014 Pavol Babincak <pbabinca@redhat.com> - 1.30-1
+- add python-nose as BuildRequires as run tests in check section (pbabinca)
+- pass extra data to the Commands object via properties instead of __init__()
+ (mikeb)
+- clean up Koji login, and properly support password auth (mikeb)
+- add --runas option (mikeb)
+- run os.path.expanduser on the kojiconfig attribute in case the path is in the
+ user's home directory (bstinson)
+- Override GIT_EDITOR in tests (pbabinca)
+- Massive Flake8 fix (bochecha)
+- Fix some more Flake8 issues (bochecha)
+- Fix some flake8 issues (bochecha)
+- Simplify some code (bochecha)
+- Fix typo (bochecha)
+- tests: Ensure functioning of Commands.list_tag (bochecha)
+- list_tags: Stop executing a command (bochecha)
+- list_tags: Fix the docstring (bochecha)
+- delete_tag: Stop executing a command (bochecha)
+- tests: Ensure functioning of Commands.delete_tag (bochecha)
+- add_tag: Run the tag command in the right directory (bochecha)
+- tests: Ensure proper functioning of Commands.add_tag (bochecha)
+- tests: Factor out some code (bochecha)
+- tests: Ensure functioning of Commands.clone (bochecha)
+- gitignore: Make sure each line ends with a \n (bochecha)
+- gitignore: We're not modified any more after we wrote to disk (bochecha)
+- tests: Ensure proper functioning of GitIgnore (bochecha)
+- tests: Use nose (bochecha)
+- Remove unused import (bochecha)
+- Some more PEP8 (bochecha)
+- Add classifiers to setup.py (pbabinca)
+- Add new sources file parser even with unit tests (pbabinca)
+- If source file doesn't exist continue without downloading files (pbabinca)
+- Reformat setup.py to be compliant with PEP 8 (pbabinca)
+
+* Tue Sep 30 2014 Pavol Babincak <pbabinca@redhat.com> - 1.28-1
+- Compare fuller remote branch name with local branch before build
+
+* Fri Sep 26 2014 Pavol Babincak <pbabinca@redhat.com> - 1.27-1
+- Explicitly define pyrpkg's client name for man pages (pbabinca)
+- Refactor mock results dir to property (pbabinca)
+- Add skip-diffs option for import_srpms (lars)
+- Properly remove possible .py when creating man pages (lars)
+- Process srpm imports to empty repositories more explicitly (pbabinca)
+- Make UPLOADEXTS a class variable that can be extended (lars)
+- Introduce self.default_branch_remote for fresh clones (pbabinca)
+- On self.path change reset properties which could used old value (pbabinca)
+- Remove empty entry from git ls-files to not confuse following code (pbabinca)
+- Remove file names during srpm import in more extensible way (pbabinca)
+- Fix issue causing all current local builds via fedpkg to use md5 rather than
+ sha256 (spot)
+- License replaced with official GPL 2.0 license from gnu.org (pbabinca)
+- Allow "rpkg commit -s" (pjones)
+
+* Tue Jul 29 2014 Pavol Babincak <pbabinca@redhat.com> - 1.26-1
+- rpkg doesn't have a python module so use pyrpkg instead (pbabinca)
+
+* Tue Jul 29 2014 Pavol Babincak <pbabinca@redhat.com> - 1.25-1
+- 1.25 release (pbabinca)
+- Note to do_imports() doc. (pbabinca)
+- Change default option for switch-branch from --no-fetch to --fetch (pbabinca)
+- Allow default name of the library to be set by subclasses (pbabinca)
+- Use name attribute of cliClient to get configuration (pbabinca)
+- Make setup.py executable (pbabinca)
+- Use direct git call for fetches (pbabinca)
+- Print reason for failed switch-branch (pbabinca)
+- Match whole branch with remote name when switching branch (pbabinca)
+- Refactor: deduplicate remote & branch_merge (pbabinca)
+- De-hardcode 'origin' as the remote name (bochecha)
+- Fallback the remote on 'origin' (bochecha)
+
+* Mon Jun 09 2014 Pavol Babincak <pbabinca@redhat.com> - 1.24-1
+- 1.24 release (pbabinca)
+- Work around signed srpms (Till Maas)
+- Properly raise the error (bochecha)
+- Ability to skip NVR construction altogether for builds (pbabinca)
+- If we failed to parse NVRE from rpm output use better error message
+ (pbabinca)
+- If command to get NVRE printed anything to stderr log that command (pbabinca)
+- Refactor: correctly split string on multi lines (pbabinca)
+- Use nvr_check as an optional argument for build (pbabinca)
+- 1.23 release (pbabinca)
+- Use module_name setter instead of constructor parameter (pbabinca)
+- Set pushurl & branch_remote by default (pbabinca)
+- 1.22 release (pbabinca)
+- Define module name from command line, git url and lastly from spec (pbabinca)
+- Revert "Define module name from command line, git url and lastly from spec"
+ (pbabinca)
+
+* Sun Jun 08 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.21-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
+
+* Mon Mar 24 2014 Pavol Babincak <pbabinca@redhat.com> - 1.21-1
+- Refactor: split strings on multi lines without spaces from indentation
+ (pbabinca)
+- Refactor: remove spaces at the end of lines (pbabinca)
+- Define module name from command line, git url and lastly from spec (pbabinca)
+- Option to skip NVR existence check in build system before build (pbabinca)
+- Add an 'epoch' property to pyrpkg.Commands (bochecha)
+- Fetch remotes before switch-branch by default (pbabinca)
+- Protect rhpkg's --arches argument (pbabinca)
+
+* Tue Feb 18 2014 Dennis Gilmore <dennis@ausil.us> - 1.20-1
+- read krbservice from the koji config file (dennis)
+- We can assume that rpkg is installed if the (ville.skytta)
+- clog: Don't require empty line between changelog entries. (ville.skytta)
+- Spelling fixes. (ville.skytta)
+- expand %%{name} and %%{verion} macros when checking for unused_patches check
+ for .patch and .diff files as patches (dennis)
+- clean up some language ambiguities (dennis)
+- clog: Support %%changelog tag written in non-lowercase. (ville.skytta)
+- add spkg as a binary file extention rhbz#972903 (dennis)
+- Fixed version to 1.19 (pbabinca)
+- Don't track spec file here (pbabinca)
+- 1.20 (pbabinca)
+- Mock config temp dir in the form $(target)-$(localarch).$(mktemp)mockconfig
+ (pbabinca)
+
+* Sun Aug 04 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.19-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
+
+* Mon Apr 08 2013 Pavol Babincak <pbabinca@redhat.com> - 1.19-1
+- Generate mock-config for mockbuild if needed (rhbz#856928) (pbabinca)
+
+* Thu Feb 14 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.18-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
+
+* Fri Aug 10 2012 Robert Scheck <robert@fedoraproject.org> - 1.18-3
+- Require %%{version}-%%{release} rather %%{name}-%%{version}
+
+* Sat Jul 21 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.18-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
+
+* Mon Apr 16 2012 Jesse Keating <jkeating@redhat.com> - 1.18-1
+- Use rpmdefines when querying for package name
+
+* Mon Apr 09 2012 Jesse Keating <jkeating@redhat.com> - 1.17-1
+- Don't assume master branch for chain builds (jkeating)
+
+* Mon Mar 26 2012 Jesse Keating <jkeating@redhat.com> - 1.16-1
+- Only read from .koji/config (jkeating)
+
+* Wed Mar 21 2012 Jesse Keating <jkeating@redhat.com> - 1.15-1
+- Fix branch push warning (jkeating)
+- Handle CVS based builds when getting build hash (jkeating)
+
+* Mon Mar 12 2012 Jesse Keating <jkeating@redhat.com> - 1.14-1
+- Warn if the checked out branch cannot be pushed (jkeating)
+- Warn if commit or tag fails and we don't push (#21) (jkeating)
+- Honor ~/.koji/config (rhbz#785776) (jkeating)
+- Update help output for switch-branch (rhbz#741742) (jkeating)
+
+* Thu Mar 01 2012 Jesse Keating <jkeating@redhat.com> - 1.13-1
+- Return proper exit code from builds (#20) (jkeating)
+- Fix md5 option in the build parser (jkeating)
+- More completion fixes (jkeating)
+- Add mock-config and mockbuild completion (jkeating)
+- Simplify test for rpkg availability. (ville.skytta)
+- Fix ~/... path completion. (ville.skytta (jkeating)
+- Add a --raw option to clog (#15) (jkeating)
+- Make things quiet when possible (jkeating)
+- Fix up figuring out srpm hash type (jkeating)
+- Allow defining an alternative builddir (jkeating)
+- Conflict with older fedpkg (jkeating)
+- Attempt to automatically set the md5 flag (jkeating)
+- Use -C not -c for config. (#752411) (jkeating)
+- Don't check gpg sigs when importing srpms (ticket #16) (jkeating)
+- Enable md5 option in mockbuild (twaugh) (jkeating)
+
+* Tue Jan 24 2012 Jesse Keating <jkeating@redhat.com> - 1.12-1
+- Fix mock-config (ticket #13) (jkeating)
+- Make md5 a common build argument (jkeating)
+- Move arches to be a common build argument (ticket #3) (jkeating)
+- Find remote branch to track better (jkeating)
+
+* Fri Jan 13 2012 Jesse Keating <jkeating@redhat.com> - 1.11-1
+- Change clog output to be more git-like (sochotnicky)
+- Fix mockconfig property (bochecha)
+- Use only new-style classes everywhere. (bochecha)
+- Testing for access before opening a file is unsafe (bochecha)
+- Add a gitbuildhash command (jkeating)
+- Always make sure you have a absolute path (aj) (jkeating)
+- don't try to import brew, just do koji (jkeating)
+
+* Mon Nov 21 2011 Jesse Keating <jkeating@redhat.com> - 1.10-1
+- Use -C for --config shortcut (jkeating)
+- Don't leave a directory on failure (#754082) (jkeating)
+- Fix chain build (#754189) (jkeating)
+- Don't hardcode brew here (jkeating)
+
+* Mon Nov 07 2011 Jesse Keating <jkeating@redhat.com> - 1.9-1
+- Don't upload if there is nothing to upload. (jkeating)
+- --branch option for import is not supported yet (jkeating)
+- Add epilog about mock-config generation (jkeating)
+- Don't assume we can create a folder named after the module. (bochecha)
+- Fix passing the optional mock root to mockbuild (bochecha)
+- Add missing registration for mockbuild target (bochecha)
+- Make the clean target work with --path. (bochecha)
+- Fix typo in a comment. (bochecha)
+- Fix syntax error in main script. (bochecha)
+- Fix typo. (bochecha)
+
+* Fri Oct 28 2011 Jesse Keating <jkeating@redhat.com> - 1.8-1
+- Get more detailed error output from lookaside (jkeating)
+- Move the curl call out to it's own function (jkeating)
+- Hide build_common from help/usage (jkeating)
+- Fix the help command (jkeating)
+
+* Tue Oct 25 2011 Jesse Keating <jkeating@redhat.com> - 1.7-1
+- Support a manually specified mock root (jkeating)
+- Add a mock-config subcommand (jkeating)
+- Fix a traceback on error. (jkeating)
+- Remove debugging code (jkeating)
+- More git api updates (jkeating)
+- Add topurl as a koji config and property (jkeating)
+- Add a mockconfig property (jkeating)
+- Turn the latest commit into a property (jkeating)
+
+* Tue Sep 20 2011 Jesse Keating <jkeating@redhat.com> - 1.6-1
+- Allow name property to load by itself (jkeating)
+
+* Mon Sep 19 2011 Jesse Keating <jkeating@redhat.com> - 1.5-1
+- Fix tag listing (#717528) (jkeating)
+- Revamp n-v-r property loading (#721389) (jkeating)
+- Don't use os.getlogin (jkeating)
+- Code style changes (jkeating)
+- Allow fedpkg lint to be configurable and to check spec file. (pingou)
+- Handle non-scratch srpm builds better (jkeating)
+
+* Wed Aug 17 2011 Jesse Keating <jkeating@redhat.com> - 1.4-1
+- Be more generic when no spec file is found (jkeating)
+- Hint about use of git status when dirty (jkeating)
+- Don't use print when we can log.info it (jkeating)
+- Don't exit from a library (jkeating)
+- Do the rpm query in our module path (jkeating)
+- Use git's native ability to checkout a branch (jkeating)
+- Use keyword arg with clone (jkeating)
+- Allow the on-demand generation of an srpm (jkeating)
+- Fix up exit codes (jkeating)
+
+* Mon Aug 01 2011 Jesse Keating <jkeating@redhat.com> - 1.3-1
+- Fix a debug string (jkeating)
+- Set the right property (jkeating)
+- Make sure we have a default hashtype (jkeating)
+- Use underscore for the dist tag (jkeating)
+- Fix the kojiweburl property (jkeating)
+
+* Wed Jul 20 2011 Jesse Keating <jkeating@redhat.com> - 1.2-1
+- Fill out the krb_creds function (jkeating)
+- Fix the log message (jkeating)
+- site_setup is no longer needed (jkeating)
+- Remove some rhtisms (jkeating)
+- Wire up the patch command in client code (jkeating)
+- Add a patch command (jkeating)
+
+* Fri Jun 17 2011 Jesse Keating <jkeating@redhat.com> - 1.1-2
+- Use version macro in files
+
+* Fri Jun 17 2011 Jesse Keating <jkeating@redhat.com> - 1.1-1
+- New tarball release with correct license files
+
+* Fri Jun 17 2011 Jesse Keating <jkeating@redhat.com> - 1.0-2
+- Fix up things found in review
+
+* Tue Jun 14 2011 Jesse Keating <jkeating@redhat.com> - 1.0-1
+- Initial package
diff --git a/sources b/sources
new file mode 100644
index 0000000..d98b3f9
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+SHA512 (rpkg-1.66.tar.gz) = 14a6947146cd5a8f9baa2d3fba0a37bb0d7ab5bd69e29c04282c882e1f249831c8faf443d4dd94adfe1bf385f6525cefef84b10d44a3949d815fd293d5f5fccc
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [rpms/rpkg] 1.70-1: Revert "Orphaned for 6+ weeks"
@ 2026-08-10 21:44
0 siblings, 0 replies; 2+ messages in thread
From: @ 2026-08-10 21:44 UTC (permalink / raw)
To: git-commits
A new commit has been pushed.
Repo : rpms/rpkg
Branch : 1.70-1
Commit : c86020b1f374905b44fd92bb2c3af780f2276e5a
Author : Ondřej Nosek <onosek@redhat.com>
Date : 2023-04-25T18:50:02+00:00
Stats : +3055/-1 in 25 file(s)
URL : https://src.fedoraproject.org/rpms/rpkg/c/c86020b1f374905b44fd92bb2c3af780f2276e5a?branch=1.70-1
Log:
Revert "Orphaned for 6+ weeks"
Executed "retire" for epel9 by mistake.
This reverts commit 59f256885f143673ec8addff2f6d0bb0a5d676c0.
---
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a29257e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,64 @@
+/rpkg-1.1.tar.gz
+/rpkg-1.2.tar.gz
+/rpkg-1.3.tar.gz
+/rpkg-1.4.tar.gz
+/rpkg-1.5.tar.gz
+/rpkg-1.6.tar.gz
+/rpkg-1.7.tar.gz
+/rpkg-1.8.tar.gz
+/rpkg-1.9.tar.gz
+/rpkg-1.10.tar.gz
+/rpkg-1.11.tar.gz
+/rpkg-1.12.tar.gz
+/rpkg-1.13.tar.gz
+/rpkg-1.14.tar.gz
+/rpkg-1.15.tar.gz
+/rpkg-1.16.tar.gz
+/rpkg-1.17.tar.gz
+/rpkg-1.18.tar.gz
+/rpkg-1.19.tar.gz
+/rpkg-1.20.tar.gz
+/rpkg-1.21.tar.gz
+/rpkg-1.24.tar.gz
+/rpkg-1.25.tar.gz
+/rpkg-1.26.tar.gz
+/rpkg-1.27.tar.gz
+/rpkg-1.28.tar.gz
+/rpkg-1.30.tar.gz
+/rpkg-1.31.tar.gz
+/rpkg-1.32.tar.gz
+/rpkg-1.33.tar.gz
+/rpkg-1.34.tar.gz
+/rpkg-1.35.tar.gz
+/rpkg-1.36.tar.gz
+/rpkg-1.37.tar.gz
+/rpkg-1.38.tar.gz
+/rpkg-1.39.tar.gz
+/rpkg-1.40.tar.gz
+/rpkg-1.41.tar.gz
+/rpkg-1.42.tar.gz
+/rpkg-1.43.tar.gz
+/rpkg-1.44.tar.gz
+/rpkg-1.45.tar.bz2
+/rpkg-1.45.tar.gz
+/rpkg-1.46.tar.gz
+/rpkg-1.47.tar.gz
+/rpkg-1.48.tar.gz
+/rpkg-1.49.tar.gz
+/rpkg-1.50.tar.gz
+/rpkg-1.51.tar.gz
+/rpkg-1.52.tar.gz
+/rpkg-1.53.tar.gz
+/rpkg-1.54.tar.gz
+/rpkg-1.55.tar.gz
+/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
+/rpkg-1.61.tar.gz
+/rpkg-1.62.tar.gz
+/rpkg-1.63.tar.gz
+/rpkg-1.64.tar.gz
+/rpkg-1.65.tar.gz
+/rpkg-1.66.tar.gz
diff --git a/0001-Do-not-use-pytest-related-dependencies-temporarily.patch b/0001-Do-not-use-pytest-related-dependencies-temporarily.patch
new file mode 100644
index 0000000..70d12b0
--- /dev/null
+++ b/0001-Do-not-use-pytest-related-dependencies-temporarily.patch
@@ -0,0 +1,25 @@
+From 50caf547ff288d8146ea5e277ab7bfcf7e8b095c Mon Sep 17 00:00:00 2001
+From: Dominik Rumian <drumian@redhat.com>
+Date: Tue, 24 Aug 2021 16:24:47 +0200
+Subject: [PATCH] [PATCH] Do not use pytest-related dependencies temporarily
+
+Signed-off-by: Dominik Rumian <drumian@redhat.com>
+---
+ setup.py | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/setup.py b/setup.py
+index 9c6d881..557cf5f 100755
+--- a/setup.py
++++ b/setup.py
+@@ -49,7 +49,6 @@ setup(
+ license="GPLv2+",
+ url="https://pagure.io/rpkg",
+ packages=find_packages(),
+- setup_requires=['setuptools_scm', 'pytest-runner'],
+ install_requires=install_requires,
+ tests_require=tests_require,
+ dependency_links=dep_links,
+--
+2.31.1
+
diff --git a/0002-Remove-pytest-coverage-execution.patch b/0002-Remove-pytest-coverage-execution.patch
new file mode 100644
index 0000000..fbc9cb7
--- /dev/null
+++ b/0002-Remove-pytest-coverage-execution.patch
@@ -0,0 +1,25 @@
+From 8bf7c3b1336738ed5938f679fc4d450c3f8f0a62 Mon Sep 17 00:00:00 2001
+From: Ondrej Nosek <onosek@redhat.com>
+Date: Wed, 7 Sep 2022 00:11:56 +0200
+Subject: [PATCH] Remove pytest coverage execution
+
+Signed-off-by: Ondrej Nosek <onosek@redhat.com>
+---
+ setup.cfg | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/setup.cfg b/setup.cfg
+index 5e29c2f..4fe73fa 100644
+--- a/setup.cfg
++++ b/setup.cfg
+@@ -5,7 +5,6 @@ test = pytest
+ max-line-length = 100
+
+ [tool:pytest]
+-addopts = --cov=pyrpkg
+ testpaths = tests
+
+ [egg_info]
+--
+2.37.2
+
diff --git a/0003-Remove-Environment-Markers-syntax.patch b/0003-Remove-Environment-Markers-syntax.patch
new file mode 100644
index 0000000..f596ce9
--- /dev/null
+++ b/0003-Remove-Environment-Markers-syntax.patch
@@ -0,0 +1,24 @@
+From ac1c2995d17b106bbfd0ab6c84ab022da8b18e3d Mon Sep 17 00:00:00 2001
+From: Ondrej Nosek <onosek@redhat.com>
+Date: Mon, 7 Feb 2022 03:01:11 +0100
+Subject: [PATCH] Remove "Environment Markers" syntax
+
+Signed-off-by: Ondrej Nosek <onosek@redhat.com>
+---
+ requirements/test-pypi.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/requirements/test-pypi.txt b/requirements/test-pypi.txt
+index 830d8c3..b732dcb 100644
+--- a/requirements/test-pypi.txt
++++ b/requirements/test-pypi.txt
+@@ -1,5 +1,5 @@
+ coverage
+-mock == 1.0.1;python_version<"3.3"
++mock == 1.0.1
+ flake8
+ pytest
+ pytest-cov
+--
+2.34.1
+
diff --git a/0004-Process-source-URLs-with-fragment-in-pre-push-hook.patch b/0004-Process-source-URLs-with-fragment-in-pre-push-hook.patch
new file mode 100644
index 0000000..e252038
--- /dev/null
+++ b/0004-Process-source-URLs-with-fragment-in-pre-push-hook.patch
@@ -0,0 +1,42 @@
+From 6d813d40aff91345b171323512b3ae641a168d45 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= <lsedlar@redhat.com>
+Date: Mon, 27 Feb 2023 08:36:20 +0100
+Subject: [PATCH] Process source URLs with fragment in pre-push hook
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Some download services do not have the actual filename in the URL.
+Packagers work around that by adding a fragment to the URL. This is then
+ignored by any server, but tricks RPM into getting the correct filename.
+
+Example:
+
+ Source0: https://crates.io/api/v1/crates/actix/0.13.0/download#/actix-0.13.0.crate
+
+The filename is obviously `actix-0.13.0.crate`, but rpkg without this
+patch will come up with `download`.
+
+Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
+---
+ pyrpkg/__init__.py | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index 6a0e9eb..c650851 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -4464,7 +4464,9 @@ class Commands(object):
+ # find out the format of the source file path. From URL use just the file name.
+ # We want to keep hierarchy of the files if possible
+ res = urllib.parse.urlparse(file_location)
+- if res.scheme and res.netloc:
++ if res.scheme and res.fragment:
++ source_files.append(os.path.basename(res.fragment))
++ elif res.scheme and res.netloc:
+ source_files.append(os.path.basename(res.path))
+ else:
+ source_files.append(file_location)
+--
+2.39.2
+
diff --git a/0005-container-build-update-signing-intent-help-for-OSBS-.patch b/0005-container-build-update-signing-intent-help-for-OSBS-.patch
new file mode 100644
index 0000000..4ead6a3
--- /dev/null
+++ b/0005-container-build-update-signing-intent-help-for-OSBS-.patch
@@ -0,0 +1,30 @@
+From e38cfe4b688b600c411a9745922b77ebb9c14122 Mon Sep 17 00:00:00 2001
+From: Ken Dreyer <kdreyer@redhat.com>
+Date: Tue, 28 Feb 2023 16:17:03 -0500
+Subject: [PATCH] container-build: update --signing-intent help for OSBS 2
+
+OSBS 2 logs the reactor configuration in a slightly different way.
+Update the --help text for --signing-intent to point users at the new
+location.
+
+Signed-off-by: Ken Dreyer <kdreyer@redhat.com>
+---
+ pyrpkg/cli.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/pyrpkg/cli.py b/pyrpkg/cli.py
+index 41c4354..c3672b3 100644
+--- a/pyrpkg/cli.py
++++ b/pyrpkg/cli.py
+@@ -1724,7 +1724,7 @@ class cliClient(object):
+ " server. If unspecified, the server will use the signing intent"
+ " of the compose_ids you specify, or the server's"
+ " default_signing_intent. To view the full list of possible"
+- " names, see REACTOR_CONFIG in orchestrator.log.")
++ " names, see atomic_reactor.config in osbs-build.log.")
+
+ parser.add_argument(
+ '--skip-remote-rules-validation',
+--
+2.39.2
+
diff --git a/0006-Do-not-generate-pre-push-hook-script-in-some-cases.patch b/0006-Do-not-generate-pre-push-hook-script-in-some-cases.patch
new file mode 100644
index 0000000..3369959
--- /dev/null
+++ b/0006-Do-not-generate-pre-push-hook-script-in-some-cases.patch
@@ -0,0 +1,37 @@
+From 30f189736137a50da4b740acf775ff6675a15a70 Mon Sep 17 00:00:00 2001
+From: Ondrej Nosek <onosek@redhat.com>
+Date: Wed, 8 Mar 2023 16:39:16 +0100
+Subject: [PATCH] Do not generate pre-push hook script in some cases
+
+Some rpkg users don't use fedpkg or similar tool for cloning
+and therefore there is no tool to execute the pre-push-check
+function. Do not generate the hook script in this case.
+
+Fixes: #665
+JIRA: RHELCMP-11392
+Signed-off-by: Ondrej Nosek <onosek@redhat.com>
+---
+ pyrpkg/__init__.py | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index acdad22..776cb21 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -1795,6 +1795,13 @@ class Commands(object):
+ for possible user mistakes.
+ """
+ tool_name = os.path.basename(sys.argv[0]) # rhpkg|fedpkg|...
++ if not tool_name:
++ # empty argv - this functionality is not executed from x-pkg tool
++ # and therefore there isn't a program that can run pre-push-check.
++ # Example: the COPR team executes 'clone' by their own script.
++ self.log.debug('Pre-push hook script was NOT added - missing '
++ 'the packaging tool like fedpkg, rhpkg, ...')
++ return
+ hook_content = textwrap.dedent("""
+ #!/bin/bash
+
+--
+2.39.2
+
diff --git a/0007-More-robust-spec-file-presence-checking.patch b/0007-More-robust-spec-file-presence-checking.patch
new file mode 100644
index 0000000..a1dde64
--- /dev/null
+++ b/0007-More-robust-spec-file-presence-checking.patch
@@ -0,0 +1,292 @@
+From 1108810bdefd0d880517b274acd6a3bd0d4156e0 Mon Sep 17 00:00:00 2001
+From: Ondrej Nosek <onosek@redhat.com>
+Date: Tue, 21 Mar 2023 02:44:04 +0100
+Subject: [PATCH 07/12] More robust spec file presence checking
+
+Some commands (verrel, sources, prep, import, ...) need to check
+whether the dist-git repository is in the correct state. It means
+at least the presence of the specfile.
+In the beginning, rpkg detects layouts. Layouts determine the file
+structure of the repository. For example, most commands can't
+be executed for the RetiredLayout (there is no specfile).
+When the repository directory exists, some layout can be always
+detected. Therefore '--path' argument is now checked for
+a valid directory.
+The timeout change in the request fixes the new bandit's finding.
+
+Fixes: #663
+JIRA: RHELCMP-11387
+
+Signed-off-by: Ondrej Nosek <onosek@redhat.com>
+---
+ pyrpkg/__init__.py | 9 ++++---
+ pyrpkg/cli.py | 8 +++---
+ pyrpkg/layout/__init__.py | 4 +--
+ pyrpkg/utils.py | 14 ++++++++++
+ tests/commands/test_push.py | 54 +++++++++++++++++++------------------
+ tests/test_cli.py | 12 ++++++---
+ 6 files changed, 63 insertions(+), 38 deletions(-)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index 776cb21..028d195 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -923,9 +923,8 @@ class Commands(object):
+ def load_spec(self):
+ """This sets the spec attribute"""
+
+- if self.layout is None:
++ if self.layout is None or isinstance(self.layout, layout.IncompleteLayout):
+ raise rpkgError('Spec file is not available')
+-
+ if self.is_retired():
+ raise rpkgError('This package or module is retired. The action has stopped.')
+
+@@ -1166,8 +1165,10 @@ class Commands(object):
+
+ @property
+ def sources_filename(self):
+- if self.layout is None:
+- return os.path.join(self.path, 'sources')
++ if self.layout is None or isinstance(self.layout, layout.IncompleteLayout):
++ raise rpkgError('Spec file is not available')
++ if self.is_retired():
++ raise rpkgError('This package or module is retired. The action has stopped.')
+ return os.path.join(
+ self.path, self.layout.sources_file_template.replace("{0.repo_name}", self.repo_name))
+
+diff --git a/pyrpkg/cli.py b/pyrpkg/cli.py
+index c3672b3..1bcf6e4 100644
+--- a/pyrpkg/cli.py
++++ b/pyrpkg/cli.py
+@@ -386,7 +386,7 @@ class cliClient(object):
+ help='Run Koji commands as a different user')
+ # Let the user define a path to work in rather than cwd
+ self.parser.add_argument('--path', default=None,
+- type=utils.u,
++ type=utils.validate_path,
+ help='Define the directory to work in '
+ '(defaults to cwd)')
+ # Verbosity
+@@ -911,8 +911,9 @@ class cliClient(object):
+ if 'path' in args:
+ # Without "path", we can't really test...
+ url = '%(protocol)s://%(host)s/%(path)s/info/refs?service=git-receive-pack' % args
+- resp = requests.head(url, auth=HTTPBasicAuth(args['username'],
+- args['password']))
++ resp = requests.head(url,
++ auth=HTTPBasicAuth(args['username'], args['password']),
++ timeout=15)
+ if resp.status_code == 401:
+ return self.oidc_client.report_token_issue()
+
+@@ -2363,6 +2364,7 @@ class cliClient(object):
+
+ def import_srpm(self):
+ uploadfiles = self.cmd.import_srpm(self.args.srpm)
++ self.load_cmd() # to reload layouts - because a specfile could appear during import
+ if uploadfiles:
+ try:
+ self.cmd.upload(uploadfiles, replace=True, offline=self.args.offline)
+diff --git a/pyrpkg/layout/__init__.py b/pyrpkg/layout/__init__.py
+index 762af0d..850ddc2 100644
+--- a/pyrpkg/layout/__init__.py
++++ b/pyrpkg/layout/__init__.py
+@@ -12,8 +12,8 @@
+ from pyrpkg.errors import LayoutError
+
+ from .base import MetaLayout
+-from .layouts import (DistGitLayout, IncompleteLayout, # noqa: F401
+- RetiredLayout, SRPMLayout)
++from .layouts import (DistGitLayout, DistGitResultsDirLayout, # noqa: F401
++ IncompleteLayout, RetiredLayout, SRPMLayout)
+
+
+ def build(path, hint=None):
+diff --git a/pyrpkg/utils.py b/pyrpkg/utils.py
+index ceb4906..3337bdb 100644
+--- a/pyrpkg/utils.py
++++ b/pyrpkg/utils.py
+@@ -26,11 +26,25 @@ if six.PY3:
+ def u(s):
+ return s
+
++ def validate_path(s):
++ abspath = os.path.abspath(s)
++ if os.path.exists(abspath):
++ return s
++ else:
++ raise argparse.ArgumentTypeError('given path \'{0}\' doesn\'t exist'.format(abspath))
++
+ getcwd = os.getcwd
+ else:
+ def u(s):
+ return s.decode('utf-8')
+
++ def validate_path(s):
++ abspath = os.path.abspath(s.decode('utf-8'))
++ if os.path.exists(abspath):
++ return s.decode('utf-8')
++ else:
++ raise argparse.ArgumentTypeError('given path \'{0}\' doesn\'t exist'.format(abspath))
++
+ getcwd = os.getcwdu
+
+
+diff --git a/tests/commands/test_push.py b/tests/commands/test_push.py
+index ef8057a..79c3a8b 100644
+--- a/tests/commands/test_push.py
++++ b/tests/commands/test_push.py
+@@ -1,9 +1,13 @@
+ # -*- coding: utf-8 -*-
+
+ import os
++import subprocess
+
+ import git
+
++import pyrpkg
++from pyrpkg.sources import SourcesFile
++
+ from . import CommandTestCase
+
+ SPECFILE_TEMPLATE = """Name: test
+@@ -22,11 +26,6 @@ Test
+ %%install
+ rm -f $RPM_BUILD_ROOT%%{_sysconfdir}/"""
+
+-CLONE_CONFIG = '''
+- bz.default-component %(module)s
+- sendemail.to %(module)s-owner@fedoraproject.org
+-'''
+-
+
+ class CommandPushTestCase(CommandTestCase):
+
+@@ -45,28 +44,30 @@ class CommandPushTestCase(CommandTestCase):
+
+ self.make_new_git(self.module)
+
+- import pyrpkg
+- cmd = pyrpkg.Commands(self.path, self.lookaside,
+- self.lookasidehash,
+- self.lookaside_cgi, self.gitbaseurl,
+- self.anongiturl, self.branchre, self.kojiprofile,
+- self.build_client, self.user, self.dist,
+- self.target, self.quiet)
+- cmd.clone_config_rpms = CLONE_CONFIG
+- cmd.clone(self.module, anon=True)
+- cmd.path = os.path.join(self.path, self.module)
+- os.chdir(os.path.join(self.path, self.module))
++ moduledir = os.path.join(self.gitroot, self.module)
++ subprocess.check_call(['git', 'clone', 'file://%s' % moduledir],
++ cwd=self.path, stdout=subprocess.PIPE,
++ stderr=subprocess.PIPE)
++
++ self.cloned_dir = os.path.join(self.path, self.module)
++ self.cmd = pyrpkg.Commands(self.cloned_dir, self.lookaside,
++ self.lookasidehash,
++ self.lookaside_cgi, self.gitbaseurl,
++ self.anongiturl, self.branchre, self.kojiprofile,
++ self.build_client, self.user, self.dist,
++ self.target, self.quiet)
++ os.chdir(self.cloned_dir)
+
+ spec_file = 'module.spec'
+ with open(spec_file, 'w') as f:
+ f.write(SPECFILE_TEMPLATE % '')
+
+- cmd.repo.index.add([spec_file])
+- cmd.repo.index.commit("add SPEC")
++ self.cmd.repo.index.add([spec_file])
++ self.cmd.repo.index.commit("add SPEC")
+
+ # Now, change directory to parent and test the push
+ os.chdir(self.path)
+- cmd.push(no_verify=True)
++ self.cmd.push(no_verify=True)
+
+
+ class TestPushWithPatches(CommandTestCase):
+@@ -76,18 +77,20 @@ class TestPushWithPatches(CommandTestCase):
+
+ self.make_new_git(self.module)
+
+- import pyrpkg
+- self.cmd = pyrpkg.Commands(self.path, self.lookaside,
++ moduledir = os.path.join(self.gitroot, self.module)
++ subprocess.check_call(['git', 'clone', 'file://%s' % moduledir],
++ cwd=self.path, stdout=subprocess.PIPE,
++ stderr=subprocess.PIPE)
++
++ self.cloned_dir = os.path.join(self.path, self.module)
++ self.cmd = pyrpkg.Commands(self.cloned_dir, self.lookaside,
+ self.lookasidehash,
+ self.lookaside_cgi, self.gitbaseurl,
+ self.anongiturl, self.branchre,
+ self.kojiprofile,
+ self.build_client, self.user, self.dist,
+ self.target, self.quiet)
+- self.cmd.clone_config_rpms = CLONE_CONFIG
+- self.cmd.clone(self.module, anon=True)
+- self.cmd.path = os.path.join(self.path, self.module)
+- os.chdir(os.path.join(self.path, self.module))
++ os.chdir(self.cloned_dir)
+
+ # Track SPEC and a.patch in git
+ spec_file = 'module.spec'
+@@ -103,7 +106,6 @@ Patch3: d.path
+ f.write(patch_file)
+
+ # Track c.patch in sources
+- from pyrpkg.sources import SourcesFile
+ sources_file = SourcesFile(self.cmd.sources_filename,
+ self.cmd.source_entry_type)
+ file_hash = self.cmd.lookasidecache.hash_file('c.patch')
+diff --git a/tests/test_cli.py b/tests/test_cli.py
+index df053aa..868ad1f 100644
+--- a/tests/test_cli.py
++++ b/tests/test_cli.py
+@@ -1841,9 +1841,11 @@ class TestMockbuild(CliTestCase):
+ @patch('pyrpkg.Commands._config_dir_basic')
+ @patch('pyrpkg.Commands._config_dir_other')
+ @patch('os.path.exists', return_value=False)
++ @patch('pyrpkg.utils.validate_path')
+ def test_use_mock_config_got_from_koji(
+- self, exists, config_dir_other, config_dir_basic):
++ self, validate_path, exists, config_dir_other, config_dir_basic):
+ mock_layout = layout.DistGitLayout(root_dir=self.cloned_repo_path)
++ validate_path.return_value = self.cloned_repo_path
+ with patch('pyrpkg.layout.build', return_value=mock_layout):
+ config_dir_basic.return_value = '/path/to/config-dir'
+
+@@ -1859,9 +1861,11 @@ class TestMockbuild(CliTestCase):
+
+ @patch('pyrpkg.Commands._config_dir_basic')
+ @patch('os.path.exists', return_value=False)
++ @patch('pyrpkg.utils.validate_path')
+ def test_fail_to_store_mock_config_in_created_config_dir(
+- self, exists, config_dir_basic):
++ self, validate_path, exists, config_dir_basic):
+ config_dir_basic.side_effect = rpkgError
++ validate_path.return_value = self.cloned_repo_path
+
+ cli_cmd = ['rpkg', '--path', self.cloned_repo_path,
+ '--release', 'rhel-7', 'mockbuild']
+@@ -1870,10 +1874,12 @@ class TestMockbuild(CliTestCase):
+ @patch('pyrpkg.Commands._config_dir_basic')
+ @patch('pyrpkg.Commands._config_dir_other')
+ @patch('os.path.exists', return_value=False)
++ @patch('pyrpkg.utils.validate_path')
+ def test_fail_to_populate_mock_config(
+- self, exists, config_dir_other, config_dir_basic):
++ self, validate_path, exists, config_dir_other, config_dir_basic):
+ config_dir_basic.return_value = '/path/to/config-dir'
+ config_dir_other.side_effect = rpkgError
++ validate_path.return_value = self.cloned_repo_path
+
+ cli_cmd = ['rpkg', '--path', self.cloned_repo_path,
+ '--release', 'rhel-7', 'mockbuild']
+--
+2.39.2
+
diff --git a/0008-Update-to-spec-file-presence-checking.patch b/0008-Update-to-spec-file-presence-checking.patch
new file mode 100644
index 0000000..723415f
--- /dev/null
+++ b/0008-Update-to-spec-file-presence-checking.patch
@@ -0,0 +1,43 @@
+From 791fd03b4de1324508583ab53c89cc67459db355 Mon Sep 17 00:00:00 2001
+From: Ondrej Nosek <onosek@redhat.com>
+Date: Tue, 21 Mar 2023 13:44:38 +0100
+Subject: [PATCH 08/12] Update to spec file presence checking
+
+Using a different approach to checking the layout. Older way prevented
+`retire` function working correctly. Layouts are detected at the
+beginning of the run and the result stays the same, unlike the direct
+checking files like dead.package in function `is_retired`.
+
+Fixes: #663
+JIRA: RHELCMP-11387
+
+Signed-off-by: Ondrej Nosek <onosek@redhat.com>
+---
+ pyrpkg/__init__.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index 028d195..e8f4886 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -925,7 +925,7 @@ class Commands(object):
+
+ if self.layout is None or isinstance(self.layout, layout.IncompleteLayout):
+ raise rpkgError('Spec file is not available')
+- if self.is_retired():
++ if isinstance(self.layout, layout.RetiredLayout):
+ raise rpkgError('This package or module is retired. The action has stopped.')
+
+ # Get a list of ".spec" files in the path we're looking at
+@@ -1167,7 +1167,7 @@ class Commands(object):
+ def sources_filename(self):
+ if self.layout is None or isinstance(self.layout, layout.IncompleteLayout):
+ raise rpkgError('Spec file is not available')
+- if self.is_retired():
++ if isinstance(self.layout, layout.RetiredLayout):
+ raise rpkgError('This package or module is retired. The action has stopped.')
+ return os.path.join(
+ self.path, self.layout.sources_file_template.replace("{0.repo_name}", self.repo_name))
+--
+2.39.2
+
diff --git a/0009-Add-more-information-about-pre-push-hook.patch b/0009-Add-more-information-about-pre-push-hook.patch
new file mode 100644
index 0000000..60bad27
--- /dev/null
+++ b/0009-Add-more-information-about-pre-push-hook.patch
@@ -0,0 +1,44 @@
+From 0393dc39bf450cf20df9db63bac135c078f64a14 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= <lsedlar@redhat.com>
+Date: Tue, 28 Mar 2023 08:53:30 +0200
+Subject: [PATCH 09/12] Add more information about pre-push hook
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+It's not obvious to many users where the check is coming from, and they
+have the power to edit the script or delete it completely. Let's try to
+improve that a bit.
+
+Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
+---
+ pyrpkg/__init__.py | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index e8f4886..7a3c9c6 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -1806,6 +1806,10 @@ class Commands(object):
+ hook_content = textwrap.dedent("""
+ #!/bin/bash
+
++ # This file was generated by {0} when cloning the repository.
++ # You can edit it to your liking or delete completely. It will not
++ # be recreated.
++
+ _remote="$1"
+ _url="$2"
+
+@@ -4429,7 +4433,7 @@ class Commands(object):
+ return self._repo_name, version, release
+
+ def pre_push_check(self, ref):
+- show_hint = ('Hint: this check (pre-push hook script) can be bypassed by adding '
++ show_hint = ('Hint: this check (.git/hooks/pre-push script) can be bypassed by adding '
+ 'the argument \'--no-verify\' argument to the push command.')
+ try:
+ commit = self.repo.commit(ref)
+--
+2.39.2
+
diff --git a/0010-pre-push-check-have-to-use-spectool-with-define.patch b/0010-pre-push-check-have-to-use-spectool-with-define.patch
new file mode 100644
index 0000000..bfe7094
--- /dev/null
+++ b/0010-pre-push-check-have-to-use-spectool-with-define.patch
@@ -0,0 +1,146 @@
+From d5be51eec99108c3809551b615064d0c5cbe628a Mon Sep 17 00:00:00 2001
+From: Ondrej Nosek <onosek@redhat.com>
+Date: Tue, 28 Mar 2023 19:58:06 +0200
+Subject: [PATCH 10/12] `pre-push-check` have to use spectool with --define
+
+To get all defined source files and patches from the specfile,
+the 'spectool' utility needs '--define' argument(s) to set specific
+paths for the repository.
+
+JIRA: RHELCMP-11466
+Fixes: #672
+
+Signed-off-by: Ondrej Nosek <onosek@redhat.com>
+---
+ pyrpkg/__init__.py | 57 +++++++++++++++------------
+ tests/commands/test_pre_push_check.py | 3 +-
+ 2 files changed, 33 insertions(+), 27 deletions(-)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index 7a3c9c6..584c141 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -4442,30 +4442,41 @@ class Commands(object):
+ sys.exit(1)
+
+ try:
++ clone_dir = tempfile.mkdtemp(prefix="pre_push_hook_")
++ for cmd in [
++ ('git', 'clone', self.path, clone_dir),
++ ('git', 'checkout', ref),
++ ]:
++ ret, _, _ = self._run_command(cmd, cwd=clone_dir,
++ # suppress unwanted printing of command line messages
++ return_stdout=True, return_stderr=True)
++ if ret != 0:
++ self.log.error('Command \'{0}\' failed. Push operation '
++ 'was cancelled.'.format(' '.join(cmd)))
++ self.log.warning(show_hint)
++ sys.exit(2)
++
++ # get all source files from the specfile (including patches)
+ # Assume, that specfile names are same in the active branch
+ # and in the pushed branch (git checkout f37 && git push origin rawhide)
+ # in this case 'f37' is active branch and 'rawhide' is pushed branch.
+ specfile_path_absolute = os.path.join(self.layout.specdir, self.spec)
+ # convert to relative path
+ specfile_path = os.path.relpath(specfile_path_absolute, start=self.path)
+- spec_content = self.repo.git.cat_file("-p", "{0}:{1}".format(ref, specfile_path))
+- except Exception:
+- # It might be the case of an empty commit
+- self.log.warning('Specfile doesn\'t exist. Push operation continues.')
+- return
+-
+- # load specfile content from pushed branch and save it into a temporary file
+- with tempfile.NamedTemporaryFile(mode="w+") as temporary_spec:
+- temporary_spec.write(spec_content)
+- temporary_spec.flush()
+- # get all source files from the specfile (including patches)
+- cmd = ('spectool', '-l', temporary_spec.name)
+- ret, stdout, _ = self._run_command(cmd, return_text=True, return_stdout=True)
++ cmd = ['spectool', '-l', os.path.join(clone_dir, specfile_path)]
++ # extract just '--define' arguments from rpmdefines
++ for opt, val in zip(self.rpmdefines[0::2], self.rpmdefines[1::2]):
++ if opt == '--define':
++ cmd.extend((opt, val))
++ ret, stdout, _ = self._run_command(cmd, cwd=clone_dir,
++ return_text=True, return_stdout=True)
+ if ret != 0:
+ self.log.error('Command \'{0}\' failed. Push operation '
+ 'was cancelled.'.format(' '.join(cmd)))
+ self.log.warning(show_hint)
+- sys.exit(2)
++ sys.exit(3)
++ finally:
++ self._cleanup_tmp_dir(clone_dir)
+
+ source_files = []
+ # extract source files from the spectool's output
+@@ -4490,22 +4501,16 @@ class Commands(object):
+ sources_file_path_absolute = self.sources_filename
+ # convert to relative path
+ sources_file_path = os.path.relpath(sources_file_path_absolute, start=self.path)
+- sources_file_content = self.repo.git.cat_file(
+- '-p', '{0}:{1}'.format(ref, sources_file_path))
++
++ # parse 'sources' files content
++ sourcesf = SourcesFile(sources_file_path, self.source_entry_type)
++ sourcesf_entries = set(item.file for item in sourcesf.entries)
+ except Exception:
+ self.log.warning('\'sources\' file doesn\'t exist. Push operation continues.')
+ # NOTE: check doesn't fail when 'sources' file doesn't exist. Just skips the rest.
+ # it might be the case of the push without 'sources' = retiring the repository
+ return
+
+- # load 'sources' file content from pushed branch and save it into a temporary file
+- with tempfile.NamedTemporaryFile(mode="w+") as temporary_sources_file:
+- temporary_sources_file.write(sources_file_content)
+- temporary_sources_file.flush()
+- # parse 'sources' files content
+- sourcesf = SourcesFile(temporary_sources_file.name, self.source_entry_type)
+- sourcesf_entries = set(item.file for item in sourcesf.entries)
+-
+ # list of all files (their relative paths) in the commit
+ repo_entries = set(item.path for item in commit.tree.traverse() if item.type != "tree")
+
+@@ -4518,7 +4523,7 @@ class Commands(object):
+ 'nor tracked in git. '
+ 'Push operation was cancelled'.format(source_file))
+ self.log.warning(show_hint)
+- sys.exit(3)
++ sys.exit(4)
+
+ # verify all file entries in 'sources' were uploaded to the lookaside cache
+ for entry in sourcesf.entries:
+@@ -4532,6 +4537,6 @@ class Commands(object):
+ self.log.error('Source file (or tarball) \'{}\' wasn\'t uploaded to the lookaside '
+ 'cache. Push operation was cancelled.'.format(filename))
+ self.log.warning(show_hint)
+- sys.exit(4)
++ sys.exit(5)
+
+ return 0 # The push operation continues
+diff --git a/tests/commands/test_pre_push_check.py b/tests/commands/test_pre_push_check.py
+index 5e314b9..ee151c1 100644
+--- a/tests/commands/test_pre_push_check.py
++++ b/tests/commands/test_pre_push_check.py
+@@ -37,6 +37,7 @@ class TestPrePushCheck(CommandTestCase):
+ def setUp(self):
+ super(TestPrePushCheck, self).setUp()
+
++ self.dist = "rhel-8"
+ self.make_new_git(self.module)
+
+ moduledir = os.path.join(self.gitroot, self.module)
+@@ -87,7 +88,7 @@ Patch3: d.patch
+ with self.assertRaises(SystemExit) as exc:
+ self.cmd.pre_push_check("HEAD")
+
+- self.assertEqual(exc.exception.code, 3)
++ self.assertEqual(exc.exception.code, 4)
+ log_error.assert_called_once_with("Source file 'b.patch' was neither listed in the "
+ "'sources' file nor tracked in git. Push operation "
+ "was cancelled")
+--
+2.39.2
+
diff --git a/0011-A-HEAD-query-into-a-lookaside-cache.patch b/0011-A-HEAD-query-into-a-lookaside-cache.patch
new file mode 100644
index 0000000..a3281b2
--- /dev/null
+++ b/0011-A-HEAD-query-into-a-lookaside-cache.patch
@@ -0,0 +1,97 @@
+From 77cd608e596af94811c22a16ff58a265d9c7381e Mon Sep 17 00:00:00 2001
+From: Ondrej Nosek <onosek@redhat.com>
+Date: Fri, 31 Mar 2023 14:09:09 +0200
+Subject: [PATCH 11/12] A HEAD query into a lookaside cache
+
+A query about whether some file is present in the lookaside cache was
+under authentication and it prevented using command `pre-push-check`
+for those without the 'packager' permission.
+Added another method (based on HTTP HEAD), that allows the same check
+without authentication.
+
+JIRA: RHELCMP-11485
+Fixes: https://pagure.io/fedpkg/issue/513
+
+Signed-off-by: Ondrej Nosek <onosek@redhat.com>
+---
+ pyrpkg/__init__.py | 2 +-
+ pyrpkg/lookaside.py | 36 ++++++++++++++++++++++++++++++++++--
+ 2 files changed, 35 insertions(+), 3 deletions(-)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index 584c141..15203b7 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -4529,7 +4529,7 @@ class Commands(object):
+ for entry in sourcesf.entries:
+ filename = entry.file
+ hash = entry.hash
+- file_exists_in_lookaside = self.lookasidecache.remote_file_exists(
++ file_exists_in_lookaside = self.lookasidecache.remote_file_exists_head(
+ self.ns_repo_name if self.lookaside_namespaced else self.repo_name,
+ filename,
+ hash)
+diff --git a/pyrpkg/lookaside.py b/pyrpkg/lookaside.py
+index 90f0f1e..ecbf12b 100644
+--- a/pyrpkg/lookaside.py
++++ b/pyrpkg/lookaside.py
+@@ -22,7 +22,7 @@ import sys
+
+ import pycurl
+ import six
+-from six.moves import http_client
++from six.moves import http_client, urllib
+
+ from .errors import (AlreadyUploadedError, DownloadError, InvalidHashType,
+ UploadError)
+@@ -157,7 +157,7 @@ class CGILookasideCache(object):
+ return
+
+ self.log.info("Downloading %s", filename)
+- urled_file = filename.replace(' ', '%20')
++ urled_file = urllib.parse.quote(filename)
+ url = self.get_download_url(name, urled_file, hash, hashtype, **kwargs)
+ if isinstance(url, six.text_type):
+ url = url.encode('utf-8')
+@@ -200,6 +200,38 @@ class CGILookasideCache(object):
+ if not self.file_is_valid(outfile, hash, hashtype=hashtype):
+ raise DownloadError('%s failed checksum' % filename)
+
++ def remote_file_exists_head(self, name, filename, hash):
++ """Verify whether a file exists on the lookaside cache.
++ Uses a HTTP HEAD request and doesn't require authentication.
++
++ :param str name: The name of the module. (usually the name of the
++ SRPM). This can include the namespace as well (depending on what
++ the server side expects).
++ :param str filename: The name of the file to check for.
++ :param str hash: The known good hash of the file.
++ """
++
++ urled_file = urllib.parse.quote(filename)
++ url = self.get_download_url(name, urled_file, hash, self.hashtype)
++
++ c = pycurl.Curl()
++ c.setopt(pycurl.URL, url)
++ c.setopt(pycurl.NOBODY, True)
++ c.setopt(pycurl.FOLLOWLOCATION, 1)
++
++ try:
++ c.perform()
++ status = c.getinfo(pycurl.RESPONSE_CODE)
++ except Exception as e:
++ raise DownloadError(e)
++ finally:
++ c.close()
++
++ if status != 200:
++ self.log.debug('Unavailable file \'%s\' at %s' % (filename, url))
++ return False
++ return True
++
+ def remote_file_exists(self, name, filename, hash):
+ """Verify whether a file exists on the lookaside cache
+
+--
+2.39.2
+
diff --git a/0012-pre-push-hook-script-contains-a-user-s-config.patch b/0012-pre-push-hook-script-contains-a-user-s-config.patch
new file mode 100644
index 0000000..ff2676d
--- /dev/null
+++ b/0012-pre-push-hook-script-contains-a-user-s-config.patch
@@ -0,0 +1,197 @@
+From 1f03eb9102f765c36cc201a499d815732e67dd39 Mon Sep 17 00:00:00 2001
+From: Ondrej Nosek <onosek@redhat.com>
+Date: Mon, 27 Mar 2023 23:34:12 +0200
+Subject: [PATCH 12/12] pre-push hook script contains a user's config
+
+When the `clone` command is called with an argument
+-C|--config <config_file>
+this argument is placed to the generated pre-push script.
+
+Fixes: #667
+JIRA: RHELCMP-11394
+
+Signed-off-by: Ondrej Nosek <onosek@redhat.com>
+---
+ pyrpkg/__init__.py | 23 ++++++++++++-------
+ pyrpkg/cli.py | 6 +++--
+ tests/commands/test_clone.py | 44 ++++++++++++++++++++++++++++++++++++
+ 3 files changed, 63 insertions(+), 10 deletions(-)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index 15203b7..9996402 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -1566,7 +1566,8 @@ class Commands(object):
+ return
+
+ def clone(self, repo, path=None, branch=None, bare_dir=None,
+- anon=False, target=None, depth=None, extra_args=None):
++ anon=False, target=None, depth=None, extra_args=None,
++ config_path=None):
+ """Clone a repo, optionally check out a specific branch.
+
+ :param str repo: the name of the repository to clone.
+@@ -1583,6 +1584,7 @@ class Commands(object):
+ to the specified number of commits.
+ :param list extra_args: additional arguments that are passed to
+ the clone command.
++ :param str config_path: path to the global config file
+ """
+
+ if not path:
+@@ -1638,7 +1640,7 @@ class Commands(object):
+
+ if not bare_dir:
+ self._add_git_excludes(os.path.join(path, git_dir))
+- self._add_git_pre_push_hook(os.path.join(path, git_dir))
++ self._add_git_pre_push_hook(os.path.join(path, git_dir), config_path)
+
+ return
+
+@@ -1654,7 +1656,7 @@ class Commands(object):
+ return repo
+
+ def clone_with_dirs(self, repo, anon=False, target=None, depth=None,
+- extra_args=None):
++ extra_args=None, config_path=None):
+ """Clone a repo old style with subdirs for each branch.
+
+ :param str repo: name of the repository to clone.
+@@ -1666,6 +1668,7 @@ class Commands(object):
+ to the specified number of commits.
+ :param list extra_args: additional arguments that are passed to
+ the clone command.
++ :param str config_path: path to the global config file
+ """
+
+ self._push_url = None
+@@ -1724,7 +1727,7 @@ class Commands(object):
+
+ # Add excludes
+ self._add_git_excludes(branch_path)
+- self._add_git_pre_push_hook(branch_path)
++ self._add_git_pre_push_hook(branch_path, config_path)
+ except (git.GitCommandError, OSError) as e:
+ raise rpkgError('Could not locally clone %s from %s: %s'
+ % (branch, repo_path, e))
+@@ -1787,7 +1790,7 @@ class Commands(object):
+ git_excludes.write()
+ self.log.debug('Git-excludes patterns were added into %s' % git_excludes_path)
+
+- def _add_git_pre_push_hook(self, conf_dir):
++ def _add_git_pre_push_hook(self, repo_dir, config_path=None):
+ """
+ Create pre-push hook script and write it in the location:
+ <repository_directory>/.git/hooks/pre-push
+@@ -1803,6 +1806,10 @@ class Commands(object):
+ self.log.debug('Pre-push hook script was NOT added - missing '
+ 'the packaging tool like fedpkg, rhpkg, ...')
+ return
++
++ # in case the clone command run with 'x-pkg -C <config_path> clone <repo_name>'
++ config_arg = ' -C "{0}"'.format(os.path.realpath(config_path)) if config_path else ""
++
+ hook_content = textwrap.dedent("""
+ #!/bin/bash
+
+@@ -1818,7 +1825,7 @@ class Commands(object):
+ do
+ command -v {0} >/dev/null 2>&1 || {{ echo >&2 "Warning: '{0}' is missing, \\
+ pre-push check is omitted. See .git/hooks/pre-push"; exit 0; }}
+- {0} pre-push-check "$local_sha"
++ {0}{1} pre-push-check "$local_sha"
+ ret_code=$?
+ if [ $ret_code -ne 0 ] && [ $exit_code -eq 0 ]; then
+ exit_code=$ret_code
+@@ -1826,8 +1833,8 @@ class Commands(object):
+ done
+
+ exit $exit_code
+- """).strip().format(tool_name)
+- git_pre_push_hook_path = os.path.join(conf_dir, '.git/hooks/pre-push')
++ """).strip().format(tool_name, config_arg)
++ git_pre_push_hook_path = os.path.join(repo_dir, '.git/hooks/pre-push')
+ if not os.path.exists(os.path.dirname(git_pre_push_hook_path)):
+ # prepare ".git/hooks" directory if it is missing
+ os.makedirs(os.path.dirname(git_pre_push_hook_path))
+diff --git a/pyrpkg/cli.py b/pyrpkg/cli.py
+index 1bcf6e4..3d8ce33 100644
+--- a/pyrpkg/cli.py
++++ b/pyrpkg/cli.py
+@@ -2182,14 +2182,16 @@ class cliClient(object):
+ anon=self.args.anonymous,
+ target=self.args.clone_target,
+ depth=self.args.depth,
+- extra_args=self.extra_args)
++ extra_args=self.extra_args,
++ config_path=self.args.config)
+ else:
+ self.cmd.clone(self.args.repo[0],
+ branch=self.args.branch,
+ anon=self.args.anonymous,
+ target=self.args.clone_target,
+ depth=self.args.depth,
+- extra_args=self.extra_args)
++ extra_args=self.extra_args,
++ config_path=self.args.config)
+
+ def commit(self):
+ if self.args.with_changelog and not self.args.message:
+diff --git a/tests/commands/test_clone.py b/tests/commands/test_clone.py
+index f741864..6ef1300 100644
+--- a/tests/commands/test_clone.py
++++ b/tests/commands/test_clone.py
+@@ -95,6 +95,50 @@ class CommandCloneTestCase(CommandTestCase):
+
+ shutil.rmtree(altpath)
+
++ def test_clone_anonymous_pre_push_hook(self):
++ self.make_new_git(self.module)
++
++ altpath = tempfile.mkdtemp(prefix='rpkg-tests.')
++
++ cmd = pyrpkg.Commands(self.path, self.lookaside, self.lookasidehash,
++ self.lookaside_cgi, self.gitbaseurl,
++ self.anongiturl, self.branchre, self.kojiprofile,
++ self.build_client, self.user, self.dist,
++ self.target, self.quiet)
++ cmd.clone(self.module, anon=True, config_path=None)
++
++ moduledir = os.path.join(self.path, self.module)
++ self.assertTrue(os.path.isfile(os.path.join(moduledir, '.git/hooks/pre-push')))
++
++ with open(os.path.join(moduledir, '.git/hooks/pre-push')) as git_hook_script:
++ content = git_hook_script.read()
++ pattern = '__main__.py pre-push-check "$local_sha"'
++ self.assertIn(pattern, content)
++
++ shutil.rmtree(altpath)
++
++ def test_clone_anonymous_pre_push_hook_config(self):
++ self.make_new_git(self.module)
++
++ altpath = tempfile.mkdtemp(prefix='rpkg-tests.')
++
++ cmd = pyrpkg.Commands(self.path, self.lookaside, self.lookasidehash,
++ self.lookaside_cgi, self.gitbaseurl,
++ self.anongiturl, self.branchre, self.kojiprofile,
++ self.build_client, self.user, self.dist,
++ self.target, self.quiet)
++ cmd.clone(self.module, anon=True, config_path="/home/conf/rhpkg.conf")
++
++ moduledir = os.path.join(self.path, self.module)
++ self.assertTrue(os.path.isfile(os.path.join(moduledir, '.git/hooks/pre-push')))
++
++ with open(os.path.join(moduledir, '.git/hooks/pre-push')) as git_hook_script:
++ content = git_hook_script.read()
++ pattern = '__main__.py -C "/home/conf/rhpkg.conf" pre-push-check "$local_sha"'
++ self.assertIn(pattern, content)
++
++ shutil.rmtree(altpath)
++
+ def test_clone_anonymous_with_branch(self):
+ self.make_new_git(self.module,
+ branches=['rpkg-tests-1', 'rpkg-tests-2'])
+--
+2.39.2
+
diff --git a/0013-Fix-unittests-for-clone-and-pre-push-hook-script.patch b/0013-Fix-unittests-for-clone-and-pre-push-hook-script.patch
new file mode 100644
index 0000000..991fb22
--- /dev/null
+++ b/0013-Fix-unittests-for-clone-and-pre-push-hook-script.patch
@@ -0,0 +1,49 @@
+From 1d82b7eaf98e695689a7dc10bd308030e3c13eea Mon Sep 17 00:00:00 2001
+From: Ondrej Nosek <onosek@redhat.com>
+Date: Sat, 1 Apr 2023 01:34:34 +0200
+Subject: [PATCH] Fix unittests for `clone` and pre-push hook script
+
+Signed-off-by: Ondrej Nosek <onosek@redhat.com>
+---
+ tests/commands/test_clone.py | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/tests/commands/test_clone.py b/tests/commands/test_clone.py
+index 6ef1300..85fdfd1 100644
+--- a/tests/commands/test_clone.py
++++ b/tests/commands/test_clone.py
+@@ -1,5 +1,6 @@
+ import os
+ import shutil
++import sys
+ import tempfile
+
+ import git
+@@ -110,9 +111,10 @@ class CommandCloneTestCase(CommandTestCase):
+ moduledir = os.path.join(self.path, self.module)
+ self.assertTrue(os.path.isfile(os.path.join(moduledir, '.git/hooks/pre-push')))
+
++ clonned_by = os.path.basename(sys.argv[0])
+ with open(os.path.join(moduledir, '.git/hooks/pre-push')) as git_hook_script:
+ content = git_hook_script.read()
+- pattern = '__main__.py pre-push-check "$local_sha"'
++ pattern = '{0} pre-push-check "$local_sha"'.format(clonned_by)
+ self.assertIn(pattern, content)
+
+ shutil.rmtree(altpath)
+@@ -132,9 +134,11 @@ class CommandCloneTestCase(CommandTestCase):
+ moduledir = os.path.join(self.path, self.module)
+ self.assertTrue(os.path.isfile(os.path.join(moduledir, '.git/hooks/pre-push')))
+
++ clonned_by = os.path.basename(sys.argv[0])
+ with open(os.path.join(moduledir, '.git/hooks/pre-push')) as git_hook_script:
+ content = git_hook_script.read()
+- pattern = '__main__.py -C "/home/conf/rhpkg.conf" pre-push-check "$local_sha"'
++ pattern = '{0} -C "/home/conf/rhpkg.conf" pre-push-check ' \
++ '"$local_sha"'.format(clonned_by)
+ self.assertIn(pattern, content)
+
+ shutil.rmtree(altpath)
+--
+2.39.2
+
diff --git a/0014-import_srpm-allow-pre-generated-srpms.patch b/0014-import_srpm-allow-pre-generated-srpms.patch
new file mode 100644
index 0000000..f596265
--- /dev/null
+++ b/0014-import_srpm-allow-pre-generated-srpms.patch
@@ -0,0 +1,105 @@
+From d87cb37fa2fea2ed535b9085a1f4c607083e1c2e Mon Sep 17 00:00:00 2001
+From: Ondrej Nosek <onosek@redhat.com>
+Date: Tue, 4 Apr 2023 01:40:23 +0200
+Subject: [PATCH 1/6] import_srpm: allow pre-generated srpms
+
+When active, do not care specfile in the srpm is processed by
+rpmautospec. Can be activated only directly via pyrpkg 'Commands'
+object.
+
+Relates: https://github.com/fedora-copr/copr/issues/2317
+Fixes: #655
+RHELCMP-11085
+
+Signed-off-by: Ondrej Nosek <onosek@redhat.com>
+---
+ pyrpkg/__init__.py | 6 +++++-
+ tests/test_cli.py | 41 +++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 46 insertions(+), 1 deletion(-)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index 9996402..ecb99c9 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -110,7 +110,7 @@ class Commands(object):
+ build_client, user=None,
+ dist=None, target=None, quiet=False,
+ distgit_namespaced=False, realms=None, lookaside_namespaced=False,
+- git_excludes=None, results_dir='root'):
++ git_excludes=None, results_dir='root', allow_pre_generated_srpm=False):
+ """Init the object and some configuration details."""
+
+ # Path to operate on, most often pwd
+@@ -239,6 +239,9 @@ class Commands(object):
+ # Layout setup
+ self.layout = layout.build(self.path,
+ 'resultsdir' if self.results_dir == 'subdir' else None)
++ # A Configuration value used in 'import_srpm' command (comes from the Copr team)
++ # If pre-generated srpms are allowed, don't care specfile is processed by rpmautospec
++ self.allow_pre_generated_srpm = allow_pre_generated_srpm
+
+ # Define properties here
+ # Properties allow us to "lazy load" various attributes, which also means
+@@ -1471,6 +1474,7 @@ class Commands(object):
+ # the dist-git repo without any specfiles - right after initialization) we are
+ # not able determine which the main specfile is.
+ if file.endswith('.spec') and not file.startswith('.') \
++ and not self.allow_pre_generated_srpm \
+ and spec_file_processed_by_rpmautospec(file, target_dir):
+ raise rpkgError('SRPM was processed by rpmautospec '
+ '(specfile "{}" was analyzed)'.format(file))
+diff --git a/tests/test_cli.py b/tests/test_cli.py
+index 868ad1f..02620ef 100644
+--- a/tests/test_cli.py
++++ b/tests/test_cli.py
+@@ -1784,6 +1784,47 @@ class TestImportSrpm(LookasideCacheMock, CliTestCase):
+ self.assertFilesExist(['package.rpmlintrc'], search_dir=self.chaos_repo)
+ self.assertFilesNotExist(['the_file_is_not_in_reserved.yaml'], search_dir=self.chaos_repo)
+
++ @patch('pyrpkg.spec_file_processed_by_rpmautospec')
++ def test_import_srpm_not_processed_by_rpmautospec(self, rpmautospec_processed):
++ cli_cmd = ['rpkg', '--path', self.chaos_repo, '--name', 'docpkg',
++ 'import', '--skip-diffs', self.srpm_file]
++
++ rpmautospec_processed.return_value = False
++ with patch('sys.argv', new=cli_cmd):
++ cli = self.new_cli()
++ with patch('pyrpkg.lookaside.CGILookasideCache.upload', self.lookasidecache_upload):
++ cli.import_srpm() # no exception should be raised
++ rpmautospec_processed.assert_called_once()
++
++ @patch('pyrpkg.spec_file_processed_by_rpmautospec')
++ def test_import_srpm_processed_by_rpmautospec(self, rpmautospec_processed):
++ cli_cmd = ['rpkg', '--path', self.chaos_repo, '--name', 'docpkg',
++ 'import', '--skip-diffs', self.srpm_file]
++
++ rpmautospec_processed.return_value = True
++ with patch('sys.argv', new=cli_cmd):
++ cli = self.new_cli()
++ with patch('pyrpkg.lookaside.CGILookasideCache.upload', self.lookasidecache_upload):
++ six.assertRaisesRegex(
++ self,
++ rpkgError,
++ 'SRPM was processed by rpmautospec',
++ cli.import_srpm)
++ rpmautospec_processed.assert_called_once()
++
++ @patch('pyrpkg.spec_file_processed_by_rpmautospec')
++ def test_import_srpm_processed_by_rpmautospec_allowed(self, rpmautospec_processed):
++ cli_cmd = ['rpkg', '--path', self.chaos_repo, '--name', 'docpkg',
++ 'import', '--skip-diffs', self.srpm_file]
++
++ rpmautospec_processed.return_value = True
++ with patch('sys.argv', new=cli_cmd):
++ cli = self.new_cli()
++ cli.cmd.allow_pre_generated_srpm = True
++ with patch('pyrpkg.lookaside.CGILookasideCache.upload', self.lookasidecache_upload):
++ cli.import_srpm() # no exception should be raised
++ rpmautospec_processed.assert_not_called()
++
+
+ class TestMockbuild(CliTestCase):
+ """Test mockbuild command"""
+--
+2.39.2
+
diff --git a/0015-Ignore-missing-spec-file-in-pre-push-hook.patch b/0015-Ignore-missing-spec-file-in-pre-push-hook.patch
new file mode 100644
index 0000000..b32833c
--- /dev/null
+++ b/0015-Ignore-missing-spec-file-in-pre-push-hook.patch
@@ -0,0 +1,37 @@
+From 3ebfeae20c74de0ca4b26b22135e1996265ea4ce Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= <lsedlar@redhat.com>
+Date: Wed, 5 Apr 2023 11:41:23 +0200
+Subject: [PATCH 2/6] Ignore missing spec file in pre-push hook
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+For modules or containers there will be no spec file, and there is
+nothing to block the push on.
+
+Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
+---
+ pyrpkg/__init__.py | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index ecb99c9..d3a7a1c 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -4471,7 +4471,12 @@ class Commands(object):
+ # Assume, that specfile names are same in the active branch
+ # and in the pushed branch (git checkout f37 && git push origin rawhide)
+ # in this case 'f37' is active branch and 'rawhide' is pushed branch.
+- specfile_path_absolute = os.path.join(self.layout.specdir, self.spec)
++ try:
++ specfile_path_absolute = os.path.join(self.layout.specdir, self.spec)
++ except rpkgError:
++ # No specfile found, nothing to check
++ return
++
+ # convert to relative path
+ specfile_path = os.path.relpath(specfile_path_absolute, start=self.path)
+ cmd = ['spectool', '-l', os.path.join(clone_dir, specfile_path)]
+--
+2.39.2
+
diff --git a/0016-Check-remote-file-with-correct-hash.patch b/0016-Check-remote-file-with-correct-hash.patch
new file mode 100644
index 0000000..9bf9eac
--- /dev/null
+++ b/0016-Check-remote-file-with-correct-hash.patch
@@ -0,0 +1,61 @@
+From 4bd4ab1823a7d4bc218b8057b7f00808fabf7648 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= <lsedlar@redhat.com>
+Date: Wed, 5 Apr 2023 09:34:33 +0200
+Subject: [PATCH 3/6] Check remote file with correct hash
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The configured hashtype doesn't have to actually be used. There can be
+old repos that still use md5.
+
+JIRA: RHELCMP-11508
+Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
+---
+ pyrpkg/__init__.py | 3 ++-
+ pyrpkg/lookaside.py | 5 +++--
+ 2 files changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index d3a7a1c..0b9a869 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -4548,7 +4548,8 @@ class Commands(object):
+ file_exists_in_lookaside = self.lookasidecache.remote_file_exists_head(
+ self.ns_repo_name if self.lookaside_namespaced else self.repo_name,
+ filename,
+- hash)
++ hash,
++ hashtype=entry.hashtype)
+ if not file_exists_in_lookaside:
+ self.log.error('Source file (or tarball) \'{}\' wasn\'t uploaded to the lookaside '
+ 'cache. Push operation was cancelled.'.format(filename))
+diff --git a/pyrpkg/lookaside.py b/pyrpkg/lookaside.py
+index ecbf12b..3efcd88 100644
+--- a/pyrpkg/lookaside.py
++++ b/pyrpkg/lookaside.py
+@@ -200,7 +200,7 @@ class CGILookasideCache(object):
+ if not self.file_is_valid(outfile, hash, hashtype=hashtype):
+ raise DownloadError('%s failed checksum' % filename)
+
+- def remote_file_exists_head(self, name, filename, hash):
++ def remote_file_exists_head(self, name, filename, hash, hashtype):
+ """Verify whether a file exists on the lookaside cache.
+ Uses a HTTP HEAD request and doesn't require authentication.
+
+@@ -209,10 +209,11 @@ class CGILookasideCache(object):
+ the server side expects).
+ :param str filename: The name of the file to check for.
+ :param str hash: The known good hash of the file.
++ :param str hashtype: The type of hash
+ """
+
+ urled_file = urllib.parse.quote(filename)
+- url = self.get_download_url(name, urled_file, hash, self.hashtype)
++ url = self.get_download_url(name, urled_file, hash, hashtype or self.hashtype)
+
+ c = pycurl.Curl()
+ c.setopt(pycurl.URL, url)
+--
+2.39.2
+
diff --git a/0017-Allow-empty-commits-when-uses_rpmautospec.patch b/0017-Allow-empty-commits-when-uses_rpmautospec.patch
new file mode 100644
index 0000000..448cbc9
--- /dev/null
+++ b/0017-Allow-empty-commits-when-uses_rpmautospec.patch
@@ -0,0 +1,35 @@
+From d2c63c32306732695b7fe5f9dda3deecb7899f4f Mon Sep 17 00:00:00 2001
+From: Jiri Kyjovsky <j1.kyjovsky@gmail.com>
+Date: Sat, 15 Apr 2023 13:46:21 +0200
+Subject: [PATCH 4/6] Allow empty commits when `uses_rpmautospec`
+
+To avoid situations where the command `commit` by default does
+commit when no change in repo is present.
+
+Fixes: #677
+JIRA: RHELCMP-11489
+Merges: https://pagure.io/rpkg/pull-request/688
+
+Signed-off-by: Jiri Kyjovsky <j1.kyjovsky@gmail.com>
+---
+ pyrpkg/__init__.py | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index 0b9a869..187796e 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -1867,7 +1867,9 @@ class Commands(object):
+
+ # construct the git command
+ # We do this via subprocess because the git module is terrible.
+- cmd = ['git', 'commit', '--allow-empty']
++ cmd = ['git', 'commit']
++ if not self.is_retired() and self.uses_rpmautospec:
++ cmd.append('--allow-empty')
+ if signoff:
+ cmd.append('-s')
+ if self.quiet:
+--
+2.39.2
+
diff --git a/0018-Config-file-option-to-skip-the-hook-script-creation.patch b/0018-Config-file-option-to-skip-the-hook-script-creation.patch
new file mode 100644
index 0000000..fa9aa01
--- /dev/null
+++ b/0018-Config-file-option-to-skip-the-hook-script-creation.patch
@@ -0,0 +1,126 @@
+From b48eb502d330ec7a543805d7f185ea270df75b90 Mon Sep 17 00:00:00 2001
+From: Ondrej Nosek <onosek@redhat.com>
+Date: Wed, 12 Apr 2023 00:42:04 +0200
+Subject: [PATCH 5/6] Config file option to skip the hook script creation
+
+A new option named "skip_hooks" can be added to the config file
+(into the main section). It accepts boolean values and when
+the option is present and set, it prevents creating the pre-push
+hook script during cloning a dist-git repository.
+
+Fixes: https://pagure.io/fedpkg/issue/515
+JIRA: RHELCMP-11491
+
+Signed-off-by: Ondrej Nosek <onosek@redhat.com>
+---
+ pyrpkg/__init__.py | 14 ++++++++++----
+ pyrpkg/cli.py | 13 +++++++++++--
+ 2 files changed, 21 insertions(+), 6 deletions(-)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index 187796e..7fddff7 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -1571,7 +1571,7 @@ class Commands(object):
+
+ def clone(self, repo, path=None, branch=None, bare_dir=None,
+ anon=False, target=None, depth=None, extra_args=None,
+- config_path=None):
++ config_path=None, skip_hooks=None):
+ """Clone a repo, optionally check out a specific branch.
+
+ :param str repo: the name of the repository to clone.
+@@ -1589,6 +1589,7 @@ class Commands(object):
+ :param list extra_args: additional arguments that are passed to
+ the clone command.
+ :param str config_path: path to the global config file
++ :param bool skip_hooks: skip creation pre-push hook script
+ """
+
+ if not path:
+@@ -1644,7 +1645,8 @@ class Commands(object):
+
+ if not bare_dir:
+ self._add_git_excludes(os.path.join(path, git_dir))
+- self._add_git_pre_push_hook(os.path.join(path, git_dir), config_path)
++ if not skip_hooks:
++ self._add_git_pre_push_hook(os.path.join(path, git_dir), config_path)
+
+ return
+
+@@ -1660,7 +1662,7 @@ class Commands(object):
+ return repo
+
+ def clone_with_dirs(self, repo, anon=False, target=None, depth=None,
+- extra_args=None, config_path=None):
++ extra_args=None, config_path=None, skip_hooks=None):
+ """Clone a repo old style with subdirs for each branch.
+
+ :param str repo: name of the repository to clone.
+@@ -1673,6 +1675,7 @@ class Commands(object):
+ :param list extra_args: additional arguments that are passed to
+ the clone command.
+ :param str config_path: path to the global config file
++ :param bool skip_hooks: skip creation pre-push hook script
+ """
+
+ self._push_url = None
+@@ -1731,7 +1734,8 @@ class Commands(object):
+
+ # Add excludes
+ self._add_git_excludes(branch_path)
+- self._add_git_pre_push_hook(branch_path, config_path)
++ if not skip_hooks:
++ self._add_git_pre_push_hook(branch_path, config_path)
+ except (git.GitCommandError, OSError) as e:
+ raise rpkgError('Could not locally clone %s from %s: %s'
+ % (branch, repo_path, e))
+@@ -1820,6 +1824,8 @@ class Commands(object):
+ # This file was generated by {0} when cloning the repository.
+ # You can edit it to your liking or delete completely. It will not
+ # be recreated.
++ # Creating this file can be also prevented by adding an option
++ # "skip_hooks = True" into the {0}'s config file; [{0}] section.
+
+ _remote="$1"
+ _url="$2"
+diff --git a/pyrpkg/cli.py b/pyrpkg/cli.py
+index 3d8ce33..a1f3f44 100644
+--- a/pyrpkg/cli.py
++++ b/pyrpkg/cli.py
+@@ -2177,13 +2177,21 @@ class cliClient(object):
+ self.log.warning("Repo name should't contain '.git' suffix. "
+ "Correcting the repo name: '%s'" % repo)
+
++ skip_hooks = None
++ if self.config.has_option(self.name, "skip_hooks"):
++ try:
++ skip_hooks = self.config.getboolean(self.name, "skip_hooks")
++ except ValueError:
++ self.log.error("Error: config file option 'skip_hooks'")
++ raise
+ if self.args.branches:
+ self.cmd.clone_with_dirs(self.args.repo[0],
+ anon=self.args.anonymous,
+ target=self.args.clone_target,
+ depth=self.args.depth,
+ extra_args=self.extra_args,
+- config_path=self.args.config)
++ config_path=self.args.config,
++ skip_hooks=skip_hooks)
+ else:
+ self.cmd.clone(self.args.repo[0],
+ branch=self.args.branch,
+@@ -2191,7 +2199,8 @@ class cliClient(object):
+ target=self.args.clone_target,
+ depth=self.args.depth,
+ extra_args=self.extra_args,
+- config_path=self.args.config)
++ config_path=self.args.config,
++ skip_hooks=skip_hooks)
+
+ def commit(self):
+ if self.args.with_changelog and not self.args.message:
+--
+2.39.2
+
diff --git a/0019-Pre-push-hook-won-t-check-private-branches.patch b/0019-Pre-push-hook-won-t-check-private-branches.patch
new file mode 100644
index 0000000..37a7c52
--- /dev/null
+++ b/0019-Pre-push-hook-won-t-check-private-branches.patch
@@ -0,0 +1,45 @@
+From 4553da364d7d8a974ab0c08834ee0a54320da2cb Mon Sep 17 00:00:00 2001
+From: Ondrej Nosek <onosek@redhat.com>
+Date: Tue, 18 Apr 2023 16:06:43 +0200
+Subject: [PATCH 6/6] Pre-push hook won't check private branches
+
+The pre-push hook script was failing the when user tried to push
+a private branch. It required using the --release argument with
+the pre-push-check command and passing additional arguments into
+the hook script. That was found unreliable and private branches
+won't be checked.
+
+Fixes: #683
+JIRA: RHELCMP-11528
+
+Signed-off-by: Ondrej Nosek <onosek@redhat.com>
+---
+ pyrpkg/__init__.py | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py
+index 7fddff7..3f934d3 100644
+--- a/pyrpkg/__init__.py
++++ b/pyrpkg/__init__.py
+@@ -4489,9 +4489,15 @@ class Commands(object):
+ specfile_path = os.path.relpath(specfile_path_absolute, start=self.path)
+ cmd = ['spectool', '-l', os.path.join(clone_dir, specfile_path)]
+ # extract just '--define' arguments from rpmdefines
+- for opt, val in zip(self.rpmdefines[0::2], self.rpmdefines[1::2]):
+- if opt == '--define':
+- cmd.extend((opt, val))
++ try:
++ for opt, val in zip(self.rpmdefines[0::2], self.rpmdefines[1::2]):
++ if opt == '--define':
++ cmd.extend((opt, val))
++ except rpkgError:
++ # this exception was caused probably by using a private branch
++ self.log.warning('The pre-push script can\'t check private branches. '
++ 'Push operation continues.')
++ return
+ ret, stdout, _ = self._run_command(cmd, cwd=clone_dir,
+ return_text=True, return_stdout=True)
+ if ret != 0:
+--
+2.39.2
+
diff --git a/dead.package b/dead.package
deleted file mode 100644
index 5204a84..0000000
--- a/dead.package
+++ /dev/null
@@ -1 +0,0 @@
-Orphaned for 6+ weeks
diff --git a/remove-koji-and-rpm-py-installer-from-requires.patch b/remove-koji-and-rpm-py-installer-from-requires.patch
new file mode 100644
index 0000000..90adee0
--- /dev/null
+++ b/remove-koji-and-rpm-py-installer-from-requires.patch
@@ -0,0 +1,29 @@
+From ec0c8b368fd560b319c6603f35dda803fe4b2e99 Mon Sep 17 00:00:00 2001
+From: Dominik Rumian <drumian@redhat.com>
+Date: Tue, 24 Aug 2021 12:51:17 +0200
+Subject: [PATCH] [PATCH] remove koji and rpm-py-installer from requires
+
+Signed-off-by: Dominik Rumian <drumian@redhat.com>
+---
+ setup.py | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/setup.py b/setup.py
+index 9c6d881..8c92aae 100755
+--- a/setup.py
++++ b/setup.py
+@@ -34,6 +34,11 @@ install_requires, dep_links = read_requirements(pypi_txt)
+ tests_require, test_dep_links = read_requirements(test_pypi_txt)
+ dep_links += test_dep_links
+
++install_requires = [
++ item for item in install_requires
++ if not item.startswith('koji') and not item.startswith('rpm-py-installer')
++]
++
+ readme_rst = os.path.join(setup_py_path, 'README.rst')
+ with open(readme_rst, 'r') as readme:
+ long_description = readme.read().rstrip()
+--
+2.31.1
+
diff --git a/rpkg.rpmlintrc b/rpkg.rpmlintrc
new file mode 100644
index 0000000..db34bbe
--- /dev/null
+++ b/rpkg.rpmlintrc
@@ -0,0 +1,3 @@
+from Config import *
+
+addFilter('/usr/share/rpkg/examples/cli/')
diff --git a/rpkg.spec b/rpkg.spec
new file mode 100644
index 0000000..60d99d1
--- /dev/null
+++ b/rpkg.spec
@@ -0,0 +1,1498 @@
+Name: rpkg
+Version: 1.66
+Release: 6%{?dist}
+
+Summary: Python library for interacting with rpm+git
+License: GPLv2+ and LGPLv2
+URL: https://pagure.io/rpkg
+BuildArch: noarch
+Source0: https://pagure.io/releases/rpkg/%{name}-%{version}.tar.gz
+
+# RHEL7 is currently the only release that is built for Python 2.
+%if 0%{?rhel} == 7
+%global with_python2 1
+%global with_python3 0
+# sitelib for noarch packages, sitearch for others (remove the unneeded one)
+%{!?__python2: %global __python2 %{__python}}
+%{!?python2_sitelib: %global python2_sitelib %(%{__python2} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")}
+%else
+# Disable python2 build by default
+%global with_python2 0
+# Enable python3 build by default
+%global with_python3 1
+%endif
+
+
+# Fix for bug 1579367
+# Due to https://pagure.io/koji/issue/912, python[23]-koji package does not
+# have egginfo.
+# rpm-py-installer is required as a proxy to install RPM python binding
+# library, so rpm is the actual requirement that must be present in the
+# requires.txt. But, rpkg has to work in all active Fedora and EPEL releases,
+# 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-Do-not-use-pytest-related-dependencies-temporarily.patch
+Patch2: 0002-Remove-pytest-coverage-execution.patch
+%if 0%{?with_python2}
+Patch3: 0003-Remove-Environment-Markers-syntax.patch
+%endif
+Patch4: 0004-Process-source-URLs-with-fragment-in-pre-push-hook.patch
+Patch5: 0005-container-build-update-signing-intent-help-for-OSBS-.patch
+Patch6: 0006-Do-not-generate-pre-push-hook-script-in-some-cases.patch
+Patch7: 0007-More-robust-spec-file-presence-checking.patch
+Patch8: 0008-Update-to-spec-file-presence-checking.patch
+Patch9: 0009-Add-more-information-about-pre-push-hook.patch
+Patch10: 0010-pre-push-check-have-to-use-spectool-with-define.patch
+Patch11: 0011-A-HEAD-query-into-a-lookaside-cache.patch
+Patch12: 0012-pre-push-hook-script-contains-a-user-s-config.patch
+Patch13: 0013-Fix-unittests-for-clone-and-pre-push-hook-script.patch
+Patch14: 0014-import_srpm-allow-pre-generated-srpms.patch
+Patch15: 0015-Ignore-missing-spec-file-in-pre-push-hook.patch
+Patch16: 0016-Check-remote-file-with-correct-hash.patch
+Patch17: 0017-Allow-empty-commits-when-uses_rpmautospec.patch
+Patch18: 0018-Config-file-option-to-skip-the-hook-script-creation.patch
+Patch19: 0019-Pre-push-hook-won-t-check-private-branches.patch
+
+%description
+Python library for interacting with rpm+git
+
+
+%if 0%{?with_python2}
+%package -n python2-%{name}
+Summary: %{summary}
+%{?python_provide:%python_provide python2-%{name}}
+
+BuildRequires: python2-devel
+
+# We br these things for man page generation due to imports
+BuildRequires: rpmlint
+BuildRequires: rpmdevtools
+BuildRequires: python2-koji >= 1.21
+BuildRequires: python2-cccolutils
+BuildRequires: PyYAML
+BuildRequires: GitPython
+BuildRequires: python-pycurl
+BuildRequires: python-requests
+BuildRequires: python-requests-kerberos
+BuildRequires: python-six >= 1.9.0
+BuildRequires: python2-argcomplete
+BuildRequires: python2-mock
+BuildRequires: python2-nose
+BuildRequires: python2-setuptools
+
+Requires: mock
+Requires: redhat-rpm-config
+Requires: rpm-build
+Requires: rpmlint
+Requires: rpmdevtools
+Requires: python2-argcomplete
+Requires: python2-cccolutils
+Requires: python2-koji >= 1.21
+Requires: PyYAML
+Requires: GitPython >= 0.2.0
+Requires: python-pycurl
+Requires: python-requests
+Requires: python-requests-kerberos
+Requires: python-six >= 1.9.0
+Requires: rpm-python
+
+Requires: %{name}-common = %{version}-%{release}
+
+Conflicts: fedpkg < 1.26
+
+# Backward compatibility with capability pyrpkg
+Provides: pyrpkg = %{version}-%{release}
+# All old versions before 1.49-1 should not be used anymore
+Obsoletes: pyrpkg < 1.49-2
+
+
+%description -n python2-%{name}
+A python library for managing RPM package sources in a git repository.
+%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.24
+%if 0%{?rhel}
+BuildRequires: python3-gobject-base
+BuildRequires: libmodulemd
+BuildRequires: python3-requests-kerberos
+%else
+BuildRequires: python3-libmodulemd
+%endif
+BuildRequires: python3-argcomplete
+BuildRequires: python3-cccolutils
+BuildRequires: python3-openidc-client
+BuildRequires: python3-pycurl
+BuildRequires: python3-six >= 1.9.0
+BuildRequires: python3-requests
+BuildRequires: python3-setuptools
+BuildRequires: python3-pytest
+BuildRequires: python3-PyYAML
+BuildRequires: rpmlint
+BuildRequires: rpmdevtools
+
+Requires: mock
+Requires: redhat-rpm-config
+Requires: rpm-build
+Requires: rpmlint
+Requires: rpmdevtools
+
+Requires: python3-argcomplete
+Requires: python3-GitPython >= 0.2.0
+Requires: python3-cccolutils
+Requires: python3-koji >= 1.24
+%if 0%{?rhel}
+Requires: python3-gobject-base
+Requires: libmodulemd
+Requires: python3-requests-kerberos
+%else
+Requires: python3-libmodulemd
+Requires: python3-rpmautospec
+%endif
+Requires: python3-rpm
+Requires: python3-pycurl
+Requires: python3-six >= 1.9.0
+Requires: python3-PyYAML
+
+Requires: %{name}-common = %{version}-%{release}
+
+Conflicts: fedpkg < 1.26
+
+%description -n python3-%{name}
+A python library for managing RPM package sources in a git repository.
+%endif
+# end of python3 section
+
+
+%package common
+Summary: Common files for %{name}
+
+# Files were moved from python2-rpkg in that version
+Conflicts: python2-rpkg < 1.52-2
+Conflicts: pyrpkg < 1.52-2
+
+%description common
+Common files for python2-%{name} and python3-%{name}.
+
+
+%prep
+%autosetup -p1
+
+# Removes section from setup.py that is relevant only for pip and
+# is not compatible with in RHEL-6 tools
+sed -i -n '/extras_require/,/}/!p' setup.py
+
+%build
+%if 0%{?with_python2}
+%{__python2} setup.py build
+%endif
+
+%if 0%{?with_python3}
+%py3_build
+%endif
+
+
+%install
+%if 0%{?with_python2}
+%{__python2} setup.py install -O1 --skip-build --root $RPM_BUILD_ROOT
+%endif
+
+%if 0%{?with_python3}
+%py3_install
+%endif
+
+
+# Create configuration directory to holding downstream clients config files
+# that are built on top of rpkg
+%{__install} -d $RPM_BUILD_ROOT%{_sysconfdir}/rpkg
+
+example_cli_dir=$RPM_BUILD_ROOT%{_datadir}/%{name}/examples/cli
+%{__install} -d $example_cli_dir
+
+# Install example CLI to rpkg own data directory
+%{__install} -d ${example_cli_dir}%{_bindir}
+%{__install} -d ${example_cli_dir}%{_sysconfdir}/bash_completion.d
+%{__install} -d ${example_cli_dir}%{_sysconfdir}/rpkg
+
+%{__install} -p -m 0644 bin/rpkg ${example_cli_dir}%{_bindir}
+%{__install} -p -m 0644 etc/bash_completion.d/rpkg.bash ${example_cli_dir}%{_sysconfdir}/bash_completion.d
+%{__install} -p -m 0644 etc/rpkg/rpkg.conf ${example_cli_dir}%{_sysconfdir}/rpkg
+
+
+%check
+%if 0%{?with_python2}
+%{__python2} -m nose tests
+%endif
+
+%if 0%{?with_python3}
+%pytest
+%endif
+
+
+%if 0%{?with_python2}
+%files -n python2-%{name}
+%doc README.rst CHANGELOG.rst
+%if 0%{?rhel} && 0%{?rhel} < 7
+%doc COPYING COPYING-koji LGPL
+%else
+%license COPYING COPYING-koji LGPL
+%endif
+# For noarch packages: sitelib
+%{python2_sitelib}/pyrpkg
+%{python2_sitelib}/%{name}-%{version}-py*.egg-info
+%endif
+
+%if 0%{?with_python3}
+%files -n python3-%{name}
+%doc README.rst CHANGELOG.rst
+%license COPYING COPYING-koji LGPL
+%{python3_sitelib}/pyrpkg
+%{python3_sitelib}/%{name}-%{version}-py*.egg-info
+%endif
+
+%files common
+%{_datadir}/%{name}
+%{_sysconfdir}/rpkg
+
+
+%changelog
+* Tue Apr 18 2023 Ondřej Nosek <onosek@redhat.com> - 1.66-6
+- Patch: Pre-push hook won't check private branches
+- Patch: Config file option to skip the hook script creation
+- Patch: Allow empty commits when `uses_rpmautospec`
+- Patch: Check remote file with correct hash
+- Patch: Ignore missing spec file in pre-push hook
+- Patch: import_srpm: allow pre-generated srpms
+
+* Sat Apr 1 2023 Ondřej Nosek <onosek@redhat.com> - 1.66-5
+- Patch: Fix unittests for `clone` and pre-push hook script
+- Patch: pre-push hook script contains a user's config
+- Patch: A HEAD query into a lookaside cache
+- Patch: `pre-push-check` have to use spectool with --define
+- Patch: Add more information about pre-push hook
+- Patch: Update to spec file presence checking
+- Patch: More robust spec file presence checking
+
+* Fri Mar 10 2023 Ondřej Nosek <onosek@redhat.com> - 1.66-4
+- Patch: Do not generate pre-push hook script in some cases
+
+* Wed Mar 1 2023 Ondřej Nosek <onosek@redhat.com> - 1.66-3
+- Patch: Process source URLs with fragment in pre-push hook
+- Patch: container-build: update --signing-intent help for OSBS 2
+
+* Tue Feb 21 2023 Ondřej Nosek <onosek@redhat.com> - 1.66-2
+- rebuild for unification of all branches
+
+* Mon Feb 20 2023 Ondřej Nosek <onosek@redhat.com> - 1.66-1
+- container-build: document --compose-ids overrides any new composes (kdreyer)
+- Use srpm when scratch-building from dirty repo - #652 (otto.liljalaakso)
+- Code cleanup in tests/test_cli.py (otto.liljalaakso)
+- Reduce indentation in assert_build helper (otto.liljalaakso)
+- Allow empty commits - 494 (msuchy)
+- Allow forcing download of all sources - #650 (otto.liljalaakso)
+- Add test case for not downloading unused sources (otto.liljalaakso)
+- Support 'results_dir=subdir' when building from srpm - #648
+ (otto.liljalaakso)
+- Use local branch name as release when there is no remote (otto.liljalaakso)
+- Allow downstreams to define a default release (otto.liljalaakso)
+- Switch load_branch_merge to use multiple return (otto.liljalaakso)
+- Unittests for 'git push' hook script (onosek)
+- Checking a repo configuration before 'git push' with a git hook script - 491
+ (onosek)
+- Fix skipping NVR check with autorelease (nils)
+- pyrpkg.spec.SpecFile: More lenient parser for Source/Patch lines (fweimer)
+- Fix URL in CHANGELOG.rst (tmz)
+- Add Jenkinsfile for CI (onosek)
+- mockbuild: escape rpm command under mock - rhbz#2130349 (onosek)
+- Fixes for exploded SRPM layouts - #633 (tdawson)
+- `fedpkg local` does not show rpmbuild output - rhbz#2124809 (onosek)
+
+* Mon Oct 10 2022 Ondřej Nosek <onosek@redhat.com> - 1.65-3
+- Patch: Fixes for exploded SRPM layouts
+- Patch: mockbuild: escape rpm command under mock
+
+* Wed Sep 7 2022 Ondřej Nosek <onosek@redhat.com> - 1.65-2
+- Patch: `fedpkg local` does not show rpmbuild output
+
+* Wed Sep 7 2022 Ondřej Nosek <onosek@redhat.com> - 1.65-1
+- Extra arguments now use shell-escaping - revert (onosek
+- Remove pytest warnings (onosek)
+- Refuse import of packages processed by rpmautospec (zbyszek)
+- follow redirects for lookaside (tkopecek)
+- Repair flake8 complaints (onosek)
+- Fix high level bandit findings (onosek)
+- container-build: improve help text for --compose-ids argument (kdreyer)
+- CONTRIBUTING.md fix links (onosek)
+- Improve change management process documentation (onosek)
+- Removing bandit issues from cli.py (drumian)
+- Extract source RPMs with rpm2archive if possible (praiskup)
+- Set up bandit scanner for rpkg (onosek)
+- Refuse to "commit -c" when using %autochangelog - 454 (drumian)
+- Refactoring loading rpmautospec feature (onosek)
+- add --background option for container-build which allows to create build with
+ lower priority (rcerven)
+- 'clean --dry-run' deprecation warning (drumian)
+- Better exit code for connection error (drumian)
+- Fix generation of optional parameters in man page (mspacek)
+- Use absolute path for mock results in `lint` (onosek)
+- contaner-build does not check for existence of kojisession.buildContainer -
+ 532 (drumian)
+- Fix: 'lint' subcommand should not invoke rpmlint on debuginfo packages -
+ rhbz#2052451 (drumian)
+- Add `--custom-user-metadata` to build command (onosek)
+- Fix: 'lint -i/--info' does not work - rhbz#2016616 (drumian)
+- Fix: AlreadyUploadedError when package has no sources - 604 (drumian)
+- Fix: Extra arguments now use shell-escaping - 587 (drumian)
+
+* Fri Aug 19 2022 Ondřej Nosek <onosek@redhat.com> - 1.64-9
+- Patch: Extract source RPMs with rpm2archive if possible
+
+* Thu Aug 18 2022 Ondřej Nosek <onosek@redhat.com> - 1.64-8
+- Patch: Repair flake8 complaints
+- Patch: follow redirects for lookaside
+
+* Sat Jul 23 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.64-7
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
+
+* Tue Jun 14 2022 Python Maint <python-maint@redhat.com> - 1.64-6
+- Rebuilt for Python 3.11
+
+* Mon Apr 18 2022 Ondřej Nosek <onosek@redhat.com> - 1.64-5
+- Patch: add --background option for container-build which allows
+ to create build
+
+* Tue Apr 05 2022 Ondřej Nosek <onosek@redhat.com> - 1.64-4
+- Patch: Better exit code for connection error
+
+* Fri Mar 18 2022 Ondřej Nosek <onosek@redhat.com> - 1.64-3
+- Patch: Add `--custom-user-metadata` to build command
+
+* Tue Feb 08 2022 Ondřej Nosek <onosek@redhat.com> - 1.64-2
+- Upload correct tarball
+
+* Tue Jan 25 2022 Ondřej Nosek <onosek@redhat.com> - 1.64-1
+- Fix: *pkg now takes into account --path parameter while building SRPM - 580
+ (drumian)
+- 'lint' can run with different 'rpmlint' versions - rhbz#1967821 (onosek)
+- Support building SRPMs in target mock - #495 (onosek)
+- Use unittest.mock on Python 3 (miro)
+- Add support for mockbuild in lint command (oturpe)
+- Fix srpm and binary rpm lookup in lint subcommand - #586 (oturpe)
+- mockbuild: allow enforcing local mock config in fedpkg (praiskup)
+- list-side-tags - fix unavailable username (sergio)
+- Accept also ~/.config/mock/<chroot>.cfg files (praiskup)
+- improve srpm --help description (kdreyer)
+- Improve how the .spec file is selected (mads)
+- Include `fmf` config in the list of reserved files - 452 (psplicha)
+- Fix flake8 syntax (onosek)
+- Continue execution if specfile parsing fails - #583 (oturpe)
+- Consider Patch tags in specfile parser - rhbz#2010518 (oturpe)
+- Support for custom completers (onosek)
+- Fixes import fail with sources already imported - #573 (drumian)
+- Also document Python 3.10 support in the README (miro)
+- Test and support Python 3.10 (miro)
+- Print SpecFile parsing debug info - rhbz#2000556 (onosek)
+- Pass sourcedir to rpmspec when specfile is parsed - #559 (oturpe)
+- Fix unittests to be Python 2 compatible (drumian)
+- Changing escaping of dash in docs - older releases (onosek)
+- Changing escaping of dash in docs. (drumian)
+
+* Fri Jan 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.63-7
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
+
+* Tue Dec 14 2021 Ondřej Nosek <onosek@redhat.com> - 1.63-6
+- drop nosetests for Python3
+- disable pytest coverage during build
+
+* Wed Dec 01 2021 Ondřej Nosek <onosek@redhat.com> - 1.63-5
+- Patch: Continue execution if specfile parsing fails
+- Patch: Consider Patch tags in specfile parser
+
+* Mon Nov 29 2021 Ondřej Nosek <onosek@redhat.com> - 1.63-4
+- Patch: Fixes import fail with sources already imported
+
+* Mon Sep 13 2021 Ondřej Nosek <onosek@redhat.com> - 1.63-3
+- Add python-requests-kerberos as a new dependency for RHEL packages
+- Patch: Print SpecFile parsing debug info
+
+* Wed Sep 01 2021 Ondřej Nosek <onosek@redhat.com> - 1.63-2
+- Patch: Pass sourcedir to rpmspec when specfile is parsed
+
+* Tue Aug 24 2021 Dominik Rumian <drumian@redhat.com> - 1.63-1
+- Do not download unused sources during command 'sources' - #559 (oturpe)
+- Added 'x-pkg verrel' for containers - #547 (jkunstle)
+- container-build: improve help text for --signing-intent argument (kdreyer)
+- Make sure all commits have a proper subject (sgallagh)
+- Fix unittest for previous commit (onosek)
+- better new-sources output when all sources already exist Fixes: #533 JIRA:
+ RHELCMP-5529 (drumian)
+- Added 'remote' to rpkg from rhpkg - 439 (jkunstle)
+- Add --offline cli argument for new-sources (oturpe)
+- Tests: Fix setting branch name with old git (nils)
+- Add and augment tests for rpmautospec (nils)
+- Reflect %autorelease when parsing spec files (nils)
+- Preprocess spec files using rpmautospec features (nils)
+- Detect generic use of rpmautospec features (nils)
+- Fix remaining Python3 SafeConfigParser warnings (nils)
+- Tests: specify branch name on `git init` (nils)
+- Remove leftover deprecated arguments (abisoi)
+- Remove deprecated arguments --dist and --module-name (abisoi)
+- Skip NVR check if the %autorelease macro is used - 109 (nils)
+- Don't access unset variable (nils)
+- Improve help in fedpkg clone command - #367 (abisoi)
+- Fix rpkg container-build ignoring values when same argument is specified
+ multiple times - #537 (abisoi)
+- list-side-tags: show creator of the tag - 358 (onosek)
+- Drop Python 2.6 support (onosek)
+- Enable flatpak tests that require libmodulemd (onosek)
+- Added <package name>.rpmlintrc to the list of files ignored by fedpkg import
+ - rhbz#1946688 (abisoi)
+- Jenkins unittests run in docker container (onosek)
+- Add support for side tag suffix (lsedlar)
+- Check whether sources file is not a directory - #541 (onosek)
+- Add config option for writing dist-git build results to a subdirectory
+ (oturpe)
+- ca cert was removed on koji-1.24.0 (sergio)
+- Improve automatic test suite (oturpe)
+- Better hint when running 'prep' on detached branch - rhbz#1907964 (onosek)
+- Update description of the clean command - rhbz#1909461 (onosek)
+- Add --skip-nvr-check to the scratch-build command - rhbz#1671012 (onosek)
+
+* Fri Jul 23 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.62-7
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
+
+* Thu Jul 08 2021 Ondřej Nosek <onosek@redhat.com> - 1.62-6
+- Patch: Preprocess spec files using rpmautospec features and use %%autorelease when parsing spec files
+- Patch: Skip NVR check if the %%autorelease macro is used
+
+* Fri Jun 04 2021 Python Maint <python-maint@redhat.com> - 1.62-5
+- Rebuilt for Python 3.10
+
+* Fri Apr 02 2021 Ondřej Nosek <onosek@redhat.com> - 1.62-4
+- Patch: Add support for side tag suffix
+
+* Wed Feb 24 2021 Ondřej Nosek <onosek@redhat.com> - 1.62-3
+- Patch: ca cert was removed on koji-1.24.0
+
+* Wed Jan 27 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.62-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
+
+* Wed Dec 02 2020 Ondřej Nosek <onosek@redhat.com> - 1.62-1
+- Allow skipping nvr checking for chain-build - rhbz#1890701 (onosek)
+- Code-style improvement - imports are sorted (onosek)
+- Fix Jenkinks tests (onosek)
+- Avoid blank lines in log files for lookaside (contyk)
+- container-build: fix help text for --isolated argument (kdreyer)
+- Add --signing-intent and --repo-url to 'flatpak-build' (otaylor)
+- Add hashtype to lookaside download path - #521 (turivniy)
+- Add new layout for packages that missing specfile - rhbz#1885771 (onosek)
+
+* Mon Sep 07 2020 Ondřej Nosek <onosek@redhat.com> - 1.61-1
+- Pytest update and MANIFEST.in prune (onosek)
+- Re-enable clog tests (onosek)
+- Skip directories inside of imported srpm file - rhbz#1866297 (onosek)
+- Skip 'sources' file when it is missing - rhbz#1867440 (onosek)
+- New layout for retired packages - rhbz#1867822 (onosek)
+- added a extendable layout module to deal with different package layouts
+ within the CLI (2183506+odra)
+- Add (onosek)
+- Pytest replaces nosetests - #501 (onosek)
+- Disable some test for 'clog' functionality (onosek)
+- Suggest a way to track remote branch - update (onosek)
+- Suggest a way to track remote branch in the error log (cqi)
+- Remove deprecated support for kojiconfig (onosek)
+- Switch from krb_login to gssapi_login - rhbz#1830430 (onosek)
+- Disable test method's docstring in nosetests list (onosek)
+- Check repo name for correct format (onosek)
+- Unittests for passing additional arguments (onosek)
+- Passing additional arguments to underlaying commands - #432 (onosek)
+- Updated supported plaforms in documentation (onosek)
+- Repair compatible formatting for Python 2.6 (onosek)
+- Repair downloading sources into external directory (onosek)
+
+* Mon Aug 31 2020 Ondřej Nosek <onosek@redhat.com> - 1.60-8
+- Patch: Skip 'sources' file when it is missing
+
+* Fri Aug 07 2020 Ondřej Nosek <onosek@redhat.com> - 1.60-7
+- Patch: added layout module to deal with different package layouts
+- Patch: clog tests workaround
+
+* Sat Aug 01 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.60-6
+- Second attempt - Rebuilt for
+ https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Wed Jul 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.60-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Mon May 25 2020 Miro Hrončok <mhroncok@redhat.com> - 1.60-4
+- Rebuilt for Python 3.9
+
+* Tue May 19 2020 Ondřej Nosek <onosek@redhat.com> - 1.60-3
+- Patch: Switch from krb_login to gssapi_login
+
+* Mon May 11 2020 Ondřej Nosek <onosek@redhat.com> - 1.60-2
+- Releasing the epel8 version
+
+* Fri Mar 20 2020 Ondřej Nosek <onosek@redhat.com> - 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 <releng@fedoraproject.org> - 1.59-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
+
+* Thu Jan 02 2020 Ondřej Nosek <onosek@redhat.com> - 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 <onosek@redhat.com> - 1.59-4
+- Patch: limited thread pool for watching module builds
+
+* Thu Nov 14 2019 Ondřej Nosek <onosek@redhat.com> - 1.59-3
+- Backport: Isolated container-build should allow arches override
+
+* Fri Oct 25 2019 Ondrej Nosek <onosek@redhat.com> - 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 <onosek@redhat.com> - 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 <onosek@redhat.com> - 1.58-10
+- Update koji dependency
+
+* Sat Aug 17 2019 Miro Hrončok <mhroncok@redhat.com> - 1.58-9
+- Rebuilt for Python 3.8
+
+* Thu Aug 01 2019 Ondřej Nosek <onosek@redhat.com> - 1.58-8
+- Obsoletes python2-rpkg after upgrade to Fedora30
+
+* Wed Jul 31 2019 Stephen Gallagher <sgallagh@redhat.com> - 1.58-7
+- Fix libmodulemd requirements
+
+* Fri Jul 26 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.58-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
+
+* Mon Jun 10 2019 Ondřej Nosek <onosek@redhat.com> - 1.58-5
+- Now again, libmodulemd is required instead of python3-libmodulemd because
+ it was causing troubles with upgrades.
+
+* Mon Jun 10 2019 Ondřej Nosek <onosek@redhat.com> - 1.58-4
+- Modify required version of koji package
+
+* Mon May 27 2019 Ondřej Nosek <onosek@redhat.com> - 1.58-3
+- Backport: Custom handler for koji watch_tasks
+- Backport: Show nvr in container-build
+- Backport: Different import --offline command behavior
+
+* Thu May 09 2019 Ondrej Nosek <onosek@redhat.com> - 1.58-2
+- Backport: fixed 'clone --branch' command
+
+* Mon Apr 29 2019 Ondřej Nosek <onosek@redhat.com> - 1.58-1
+- Ignore files in a cloned repository - #355 (onosek)
+- Handle data from python RPM binding as UTF-8 string (zebob.m)
+- srpm_import: be compatible with rhbz#1693751 (praiskup)
+- Pass --enable-network to mock - 314 (onosek)
+- Enhance 'module-overview' sub-command to show scratch status of modules.
+ (mmathesi)
+- Remove the ability to parse a module's branch automatically to determine the
+ base module stream override (mprahl)
+- Improvements for scratch module builds (mmathesi)
+- Updates to support scratch module builds (mmathesi)
+- Refactor fake Koji credential handling from TestBuildPackage class into new
+ FakeKojiCreds class so it can be shared with TestModulesCli class. (mmathesi)
+- Make Koji upload methods more generic so they can be reused. (mmathesi)
+- Allow passing --offline and -r to mbs-manager build_module_locally. (jkaluza)
+- Depth param for clone - tuning (onosek)
+- Depth param for clone - #363 (onosek)
+- Pass --disablerepo and --enablerepo to mock - 313 (onosek)
+- Import srpm without uploading sources - rhbz#1175262 (onosek)
+- Ignore any specified profile when finding the Flatpak build target (otaylor)
+- Show module build links in output from command module-build (cqi)
+- Add 'retire' command supporting both packages and modules (mmathesi)
+- Fix "push --force" (tim)
+- Container-build returns its status to command-line - #415 (onosek)
+- Upload .crate files to lookaside cache - 312 (onosek)
+- Restrict version of PyYAML on Python 2.6 (lsedlar)
+- Simplify srpm method (onosek)
+- Permit setting arbitrary rpm macros during build (riehecky)
+- Add the ability to configure multiple regex expressions for
+ base_module_stream_regex_from_branch (mprahl)
+- Do not require PyGObject in setup.py - rhbz#1679365 (onosek)
+- Fixing failing Jenkins tests (onosek)
+- Unify update-docs script with fedpkg version (onosek)
+- README: add links (onosek)
+- Watch multiple module builds (cqi)
+- Added update-docs script (onosek)
+
+* Thu Apr 25 2019 Ondřej Nosek <onosek@redhat.com> - 1.57-9
+- yet another compat fix with RPM after rhbz#1693751
+
+* Fri Apr 19 2019 Pavel Raiskup <praiskup@redhat.com> - 1.57-8
+- compat fix with RPM after rhbz#1693751
+
+* Wed Mar 20 2019 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 1.57-7
+- Backport patch for uploading *.crate into lookaside
+
+* Thu Feb 07 2019 Ondřej Nosek <onosek@redhat.com> - 1.57-6
+- Revert previous change.
+ Now python-gobject-base & libmodulemd are removed from epel7 and RHEL7
+
+* Tue Feb 05 2019 Ondřej Nosek <onosek@redhat.com> - 1.57-5
+- python-gobject-base & libmodulemd also for epel7 and RHEL7
+
+* Mon Feb 04 2019 Lubomír Sedlář <lsedlar@redhat.com> - 1.57-4
+- Disable Py2 package on F30+
+
+* Sat Feb 02 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.57-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
+
+* Thu Jan 03 2019 Ondřej Nosek <onosek@redhat.com> - 1.57-2
+- Merge changes of the .spec files for Fedora and RHEL
+
+* Thu Dec 13 2018 Ondřej Nosek <onosek@redhat.com> - 1.57-1
+- Use idna 2.7 for Python 2.6 (lsedlar)
+- Imports are sorted (onosek)
+- libmodulemd is missing on el7 - #402 (onosek)
+- Initialize bash autocompletion (onosek)
+- Set configuration in case of "clone --branches" as well (tim)
+- Fix fake spec file for clog tests (cqi)
+- Move argparse fix from fedpkg - #398 (onosek)
+- Send source mtime to dist-git - 220 (lsedlar)
+- Fix tests for mock package manager (lsedlar)
+- Specify package manager for mock-config (lsedlar)
+- Add contributing guide (onosek)
+- Validate the module build optional argument when parsing the argument
+ (mprahl)
+- Add config options to parse the base module (e.g. platform) stream from the
+ dist-git branch and apply a buildrequire override (mprahl)
+- Add the ability to pass in buildrequire and require overrides on a module
+ build (mprahl)
+- Raise an error if the module build command receives optional arguments that
+ conflict (mprahl)
+- Silence Python3 SafeConfigParser warnings (mmathesi)
+- Allow to pass posargs to tox from make (cqi)
+- Specify dependent packages in one place (cqi)
+- Don't registry flatpak-build command on Python-2.6 (otaylor)
+- Add flatpak-build subcommand (otaylor)
+- Don't pass the MBS API URL around as a parameter (otaylor)
+- TestContainerBuildWithKoji: tear down the mock appropriately (otaylor)
+- Refine test runner for py26 (cqi)
+
+* Thu Nov 15 2018 Ondřej Nosek <onosek@redhat.com> - 1.56-4
+- Allow build for RHEL-8 (onosek)
+
+* Wed Nov 14 2018 Ondřej Nosek <onosek@redhat.com> - 1.56-3
+- No mock warning (onosek)
+
+* Fri Sep 7 2018 Owen Taylor <otaylor@redhat.com> - 1.56-2
+- Add patch from upstream pull-request to add a flatpak-build subcommand
+- Add PyYAML dependencies so that the spec file at least builds on epel6/epel7
+
+* Tue Aug 21 2018 Chenxiong Qi <cqi@redhat.com> - 1.56-1
+- Validate greenwave policy early in Commands.build (cqi)
+- Refine error message for failure gating.yaml validation (cqi)
+- explain mbs-manager exception handling (nils)
+- test for missing mbs-manager with errno set (nils)
+- catch errno == ENOENT if mbs-manager is missing (nils)
+- add missing method docstring (nils)
+- Show full error from MBS (lsedlar)
+- Fix tests for greenwave policy validation (cqi)
+- Add testenv for building docs (cqi)
+- New option --buildrootdir - rhbz#1583822 (cqi)
+- Add --shell option to mockbuild - rhbz#1438685 (cqi)
+- Validate gating.yaml file for Greenwave gating (gnaponie)
+- Update README (cqi)
+- Reduce the number of repo creation for tests (cqi)
+- Fix flake8 error (cqi)
+- Drop rpm-py-installer from requires - #357 (cqi)
+- Allow _run_command to capture and return output to stdout or stderr (cqi)
+- Claim Python 3.7 in README and package classifiers (cqi)
+- Fix a bad test teardown (otaylor)
+- Refactor build command (cqi)
+- Remove rpmfluff package (cqi)
+- Set PYCURL_SSL_LIBRARY directly for installing pycurl (cqi)
+- Add py37 testenv (cqi)
+
+* Thu Jul 26 2018 Chenxiong Qi <cqi@redhat.com> - 1.55-2
+- Remove dependency python-rpmfluff
+
+* Mon Jul 23 2018 Chenxiong Qi <cqi@redhat.com> - 1.55-1
+- Fix installing pycurl for running tests (cqi)
+- Replace extra module_name with repo_name (cqi)
+- Replace name module with repo in tests/fixtures/rpkg*.conf (cqi)
+- Add --fail-fast functionality - #331 (tibbs)
+- Fix fake spec for build in rawhide (cqi)
+- Avoid to upload a file with different checksum - #204 (cqi)
+- Give more information when sources has invalid content - #227 (cqi)
+- Reserve README.md while import srpm - #149 (cqi)
+- Set to repo_name property when --name is specified (cqi)
+- Do not restrict argparse version (cqi)
+- Check old format args only if there is clone config (cqi)
+- Fix typo and reword option help and deprecation message (cqi)
+- Massive replacement of module (cqi)
+- Deprecate module_name inside rpkg internal (cqi)
+- Add new option --name and --namespace - #301 (cqi)
+- Man generator indent workaround (onosek)
+- Fixing imports in unittests (onosek)
+- Minor fixes to doc build (cqi)
+- Fix mistakes during rebase (cqi)
+- Run document generator script in Py3 explictly (cqi)
+- Remove warning of nonexisting source/_static/ during doc build (cqi)
+- Do not generate document for sample rpkg app (cqi)
+- Exclude subcommand which does not have help (cqi)
+- Ensure to clean files for generating HTML documents (cqi)
+- Fix rebase error: add module_build_watch back (cqi)
+- Fix MANIFEST.in to list files for building doc (cqi)
+- Rename generate_man_pages.py (cqi)
+- Generate HTML document and manpage for sample rpkg (cqi)
+- Simplify doc Makefile (cqi)
+- Generate commands HTML and man pages (cqi)
+- Update existing docstrings (cqi)
+- Generate documents by sphinx - #50 (cqi)
+- README: new code should be py3 compatible (ktdreyer)
+- Provide base_module to clone_config templates - #326 (tmz)
+- Refactor man generator to be reusable (puiterwijk)
+- Make sure gitcred doesn't land in man (puiterwijk)
+- Don't inject the credential helper to push if OIDC is unconfigured
+ (puiterwijk)
+- Add docblocks to gitcred methods and don't quit if OpenIDC is unconfigured
+ (puiterwijk)
+- Also inject the credential helper with rpkg push (puiterwijk)
+- Create a "gitcred" command that functions as an OIDC git-credential helper
+ (puiterwijk)
+
+* Sat Jul 14 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.54-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
+
+* Tue Jun 19 2018 Miro Hrončok <mhroncok@redhat.com> - 1.54-3
+- Rebuilt for Python 3.7
+
+* Mon May 21 2018 Chenxiong Qi <cqi@redhat.com> - 1.54-2
+- Remove koji and rpm-py-installer Python package requires
+- Fix argparse version for el6
+
+* Fri May 11 2018 Chenxiong Qi <cqi@redhat.com> - 1.54-1
+- Pass the -s/--set-default-stream to mbs-manager for module local builds.
+ (jkaluza)
+- Write mock config correctly when run in Py 3 (cqi)
+- Add --with and --without options to 'local' - rhbz#1533416 (tmz)
+- Add a test for 3f93433 (cqi)
+- Raise error if rpm command returns non-zero (cqi)
+- Use getpass.getuser() instead of pwd.getpwuid(os.getuid())[0] (jpopelka)
+- Allow setting custom MBS config file and config section in rpkg.conf.
+ (jkaluza)
+- Remove py35 testenv (cqi)
+- Ignore .env and tags (cqi)
+- Remove question mark from giturl (cqi)
+- Added custom ArgumentParser (supports allow_abbrev) (jkucera)
+- Grab the correct first line in case of rpm output (zebob.m)
+
+* Mon Apr 16 2018 Chenxiong Qi <cqi@redhat.com> - 1.53-2
+- Require python2-koji 1.15 as the minimum version
+- Refine BuildRequires
+
+* Tue Apr 10 2018 Chenxiong Qi <cqi@redhat.com> - 1.53-1
+- Use NSVs and not build IDs with module-build-local --add-local-build (mprahl)
+- Fix docstring of test_module_build_local_with_skiptests (mprahl)
+- Add long_description to package (cqi)
+- Support local module builds when there are uncommitted changes (mprahl)
+- Fix clarifying error that occurs when mbs-manager is not installed (mprahl)
+- Add support for Module Stream Expansion (MBS API v2) (mprahl)
+- Show errors when a module build fails (mprahl)
+- Move full download url construction to separate method (frostyx)
+- Fix compose related params for container-build (lucarval)
+- Avoid calling /usr/bin/python in tests (miro)
+- Change default rpmlint configuration file (athoscr)
+- Use koji.grab_session_options() rather than opencoding it (cfergeau)
+
+* Mon Mar 05 2018 Miro Hrončok <mhroncok@redhat.com> - 1.52-2
+- Introduce python3 subpackage
+
+* Thu Feb 22 2018 Chenxiong Qi <cqi@redhat.com> - 1.52-1
+- Mock ThreadPool in test_module_overview (cqi)
+- Drop rpmfluff in test (cqi)
+- Fix hardcoded directory name in test (lsedlar)
+- Improve testenv for py26 (cqi)
+- Run tests with old GitPython in py26 testenv (cqi)
+- Compile pycurl with openssl after F27 (cqi)
+- Ignore .egg/ from git (cqi)
+- Add py26 to testenv (cqi)
+- Install koji from PyPI (cqi)
+- Make compose-id and repo-url to take one or more values (csomh)
+- Let git ignore more directories (cqi)
+- Exclude pyc and __pycache__ globally in sdist (cqi)
+- Handle nonexisting mbs-manager (cqi)
+- Add dependent packages for Python 2.6 in setup.py (cqi)
+- Updated module cli API (mcurlej)
+- Declare Python versions rpkg can work with - #278 (cqi)
+- Fix flake8 errors (cqi)
+- Fix tests that do not work with Python 3 (cqi)
+- Fix tests: not impact by dict.items call (cqi)
+- Add py36 to testenv - #274 (cqi)
+- Run tox to run tests and check code styles - #276 (cqi)
+- Use flake8 3.5.0 (cqi)
+- Add files under requirements/ to sdist package (cqi)
+- Install Koji shared library via setuptools (cqi)
+- Set install and tests requires in setup.py (cqi)
+- Split pypi requirements and refine versions (cqi)
+- Change type of compose id from string to int (bfontecc)
+- Install RPM Python binding from PyPI (cqi)
+- Fix test test_lint_each_file_once (cqi)
+- Add compose-id and signing-intent arguments (bfontecc)
+- Use env's python (lucarval)
+- Use progress callback and TaskWatcher from koji_cli.lib (cqi)
+- Get buildhash from git+https:// url (lsedlar)
+- lint: Avoid checking rpm's multiple times (tmz)
+- Fix giturl as well by calling construct_build_url (cqi)
+- Fix construct anongiturl for chain-build (cqi)
+- Fix mock openidc_client (cqi)
+
+* Fri Feb 09 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.51-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
+
+* Tue Jan 23 2018 Chenxiong Qi <cqi@redhat.com> - 1.51-3
+- Backport: Add compose-id and signing-intent arguments
+- Backport: Change type of compose id from string to int
+
+* Wed Nov 08 2017 Chenxiong Qi <cqi@redhat.com> - 1.51-2
+- Backport: Fix construct anongiturl for chain-build
+- Backport: Fix giturl as well by calling construct_build_url
+
+* Fri Oct 20 2017 Chenxiong Qi <cqi@redhat.com> - 1.51-1
+- Ignore TestModulesCli if openidc-client is unavailable (cqi)
+- Port mbs-build to rpkg (mprahl)
+- Add .vscode to .gitignore (mprahl)
+- Fix TestPatch.test_rediff in order to run with old version of mock (cqi)
+- Allow to specify alternative Copr config file - #184 (cqi)
+- Tests for patch command (cqi)
+- More Tests for mockbuild command (cqi)
+- More tests for getting spec file (cqi)
+- Tests for container-build-setup command (cqi)
+- Test for container-build to use custom config (cqi)
+- Suppress output from git command within setUp (cqi)
+- Skip test if rpmfluff is not available (lsedlar)
+- Allow to override build URL (cqi)
+- Test for mock-config command (cqi)
+- Tests for copr-build command (cqi)
+- Fix arch-override for container-build (lucarval)
+- Remove unsupported osbs for container-build (lucarval)
+- cli: add --arches support for koji_cointainerbuild (mlangsdo)
+- Strip refs/heads/ from branch only once (lsedlar)
+- Don't install bin and config files (cqi)
+- Fix kojiprofile selection in cliClient.container_build_koji (cqi)
+- Avoid branch detection for 'rpkg sources' (praiskup)
+- Fix encoding in new command (cqi)
+- Minor wording improvement in help (pgier)
+- Fix indentation (pviktori)
+- Add --with and --without options to mockbuild (pviktori)
+
+* Thu Aug 31 2017 Chenxiong Qi <cqi@redhat.com> - 1.50-2
+- Backport: Fix kojiprofile selection in cliClient.container_build_koji (cqi)
+
+* Thu Aug 10 2017 Chenxiong Qi <cqi@redhat.com> - 1.50-1
+- Fix PEP8 error (cqi)
+- Spelling fixes (ville.skytta)
+- Reword help and description of new-sources and upload commands - rhbz#1248737
+ (cqi)
+- Set autorebuild enabled by default (bfontecc)
+- Add commands to whitelist_externals (cqi)
+- Declare Python 3 versions to support in setup.py (cqi)
+- Replace unicode with six.text_type (cqi)
+- Run tests in both Python 2 and 3 with tox (cqi)
+- Make tests and covered code compatible with Py3 (cqi)
+- Add requirements files (cqi)
+- Do not build srpm in test (cqi)
+- Do not actually run git-diff in tests (cqi)
+- Remove deprecated modules used in koji (cqi)
+- Non-zero exit when rpmbuild fails in local command (cqi)
+- Report deprecation of config via logger (lsedlar)
+- Print --dist deprecation warning explicitly (lsedlar)
+- utils: Avoid DeprecationWarning for messages for users (lsedlar)
+- Supply namespace to lookaside (if enabled) (lsedlar)
+- Support reading koji config from profile - #187 (cqi)
+- Remove kitchen (cqi)
+- Fix string format (cqi)
+- Recommend --release instead of --dist in mockbuild --help (tmz)
+- Allow overriding container build target by downstream (lsedlar)
+- Add a separate property for namespace (lsedlar)
+- Allow container builds from any namespace (maxamillion)
+- Make osbs support optional (cqi)
+- make osbs dependency optional (pavlix)
+- Allow explicit namespaces with slashes (lsedlar)
+- Do not hang indefinitely when lookaside cache server stops sending data
+ (jkaluza)
+- Make --module-name work with namespaces - #216 (lsedlar)
+- Include README.rst in dist package (cqi)
+- More document in README - #189 (cqi)
+- Make new command be able to print unicode - #205 (cqi)
+- Allow to specify custom info to a dummy commit (cqi)
+- Load module name correctly even if push url ends in slash - #192 (cqi)
+- Replace fedorahosted.org with pagure.io - #202 (cqi)
+- Fix rpm command to get changelog from SPEC - rhbz#1412224 (cqi)
+- Rewrite tests to avoid running rpmbuild and rpmlint (cqi)
+- Use fake value to make Command in test (cqi)
+- Python 3.6 invalid escape sequence deprecation fixes (ville.skytta)
+
+* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.49-7
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
+* Mon Jul 10 2017 Chenxiong Qi <cqi@redhat.com> - 1.49-6
+- Rename koji to python2-koji
+
+* Thu Jun 29 2017 Lubomír Sedlář <lsedlar@redhat.com> - 1.49-5
+- Allow using namespace in --module-name attribute
+
+* Thu Jun 22 2017 Chenxiong Qi <cqi@redhat.com> - 1.49-4
+- Remove python-osbs-client
+
+* Fri Jun 16 2017 Chenxiong Qi <cqi@redhat.com> - 1.49-3
+- Backport to make osbs optional
+
+* Mon Mar 27 2017 Chenxiong Qi <cqi@redhat.com> - 1.49-2
+- Rebuilt to rename pyrpkg to python2-rpkg
+
+* Wed Feb 22 2017 Chenxiong Qi <cqi@redhat.com> - 1.49-1
+- More upload PyCURL fixes for EL 7 (merlin)
+- Move tag inheritance check into a separate method (cqi)
+
+* Sat Feb 11 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.48-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
+
+* Wed Feb 1 2017 Lubomír Sedlář <lsedlar@redhat.com> - 1.48-2
+- Backport patch to move tag inheritance check to separate method
+
+* Thu Dec 22 2016 Chenxiong Qi <cqi@redhat.com> - 1.48-1
+- Better message when fail to authenticate via Kerberos - #180 (cqi)
+
+* Mon Dec 19 2016 Chenxiong Qi <cqi@redhat.com> - 1.47-7
+- Refactor Commands._srpmdetails (cqi)
+
+* Thu Dec 15 2016 Chenxiong Qi <cqi@redhat.com> - 1.47-6
+- Add missing import koji.ssl.SSLCommon - BZ#1404102 (cqi)
+- Fix upload with old PyCURL - BZ#1241059 (lsedlar)
+
+* Mon Dec 12 2016 Lubomír Sedlář <lsedlar@redhat.com> - 1.47-5
+- Fix default value for krb_rdns options
+
+* Mon Dec 12 2016 Lubomír Sedlář <lsedlar@redhat.com> - 1.47-4
+- Add krb_rdns koji config
+
+* Thu Dec 08 2016 Lubomír Sedlář <lsedlar@redhat.com> - 1.47-3
+- Conflict with too old fedpkg
+
+* Wed Dec 07 2016 Chenxiong Qi <cqi@redhat.com> - 1.47-2
+- Fix test that fails on a Koji ARM builder
+
+* Fri Dec 02 2016 Chenxiong Qi <cqi@redhat.com> - 1.47-1
+- New upstream release 1.47
+
+* Tue Oct 25 2016 Lubomír Sedlář <lsedlar@redhat.com> - 1.46-5
+- Allow using gssapi for lookaside caches
+
+* Tue Sep 06 2016 Lubomír Sedlář <lsedlar@redhat.com> - 1.46-4
+- Update dependencies for python-argparse and python-hashlib
+
+* Thu Aug 25 2016 Chenxiong Qi <cqi@redhat.com> - 1.46-3
+- python-six-1.9.0 is the minimum version rpkg depends
+
+* Tue Jul 19 2016 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.46-2
+- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages
+
+* Fri Jul 15 2016 Chenxiong Qi <cqi@redhat.com> - 1.46-1
+- Warning untracked patches when push (cqi)
+- handle correct spec path when push from outside the repo (cqi)
+- Remove support for BuildContainer release task opt (lucarval)
+
+* Mon Jun 27 2016 Chenxiong Qi <cqi@redhat.com> - 1.45-2
+- Depend on python-six to be compatible with Python 3
+
+* Mon Jun 27 2016 Chenxiong Qi <cqi@redhat.com> - 1.45-1
+- add missing git-config in the git repo for testing (cqi)
+- Don't print download/upload progress outside of TTY (lsedlar)
+- Merge #58 `Rebase of #28 with conflict resolved` (cqi)
+- Get correct login without TTY (vgologuz)
+- Merge #63 `More Python 3 compatibility fixes` (lubomir.sedlar)
+- fix broken when non-ASCII in path (cqi)
+- More Python 3 compatibility fixes (ville.skytta)
+- Fix push called without argument (lsedlar)
+- Use logging.warning instead of deprecated logging.warn (ville.skytta)
+- Use assertEqual instead of deprecated assertEquals (ville.skytta)
+- Spelling fixes (ville.skytta)
+- Add missing dependencies to setup.py (ville.skytta)
+- Add tests for cloning with a namespace (lsedlar)
+- Fix cloning with -B and namespaced module (lsedlar)
+- Adjust figuring out the path of the git repo cloned (pingou)
+- Only clone into the bare_dir if no target was specified (pingou)
+- Add to the CLI the possibility to specify a target folder for the clone
+ (pingou)
+- Add unit-tests for cloning into a specified directory (pingou)
+- Let rpkg support cloning into a specified directory (pingou)
+- Python 3 fixes (ville.skytta)
+- rewrite test_commands.setup_module using git (cqi)
+- Merge #40 `push: check for missing patches` (lubomir.sedlar)
+
+* Thu Jun 02 2016 Lubomír Sedlář <lsedlar@redhat.com> - 1.44-1
+- Log container-build task results (lucarval)
+- Add support for BuildContainer release task opt (lucarval)
+- handle exception from getTaskInfo correctly (cqi)
+- fix failure of test_load_spec_where_path_contains_space on RHEL (cqi)
+- allow space appearing in path to cloned repo (cqi)
+- fix docstring of Commands.compile (cqi)
+- Make 'Failed to get ns_module_name from Git url or pushurl' message a warning
+ (issue #42) (orion)
+- pyrpkg: use git remote get-url --push (mathstuf)
+
+* Wed Mar 23 2016 Lubomír Sedlář <lubomir.sedlar@gmail.com> - 1.43-1
+- Print warning when using old git configuration (lsedlar)
+- Add rpms namespace for checkouts without namespace (lsedlar)
+
+* Wed Mar 16 2016 Lubomír Sedlář <lubomir.sedlar@gmail.com> - 1.42-1
+- Fix problems with namespacing (maxamillion)
+
+* Mon Mar 14 2016 Lubomír Sedlář <lubomir.sedlar@gmail.com> - 1.41-2
+- Depend on python-osbs directly to avoid python3
+
+* Mon Mar 14 2016 Lubomír Sedlář <lubomir.sedlar@gmail.com> - 1.41-1
+- Update upstream URL (lsedlar)
+- Fixes based on lsedlar's feedback (maxamillion)
+- add distgit namespacing for non-rpm content (docker, xdg-app, etc) (maxamillion)
+- Container-build: dont't allow to build with unpushed changes (araszka)
+- Suggest --dist option when can't get OS ver from branch (araszka)
+- fix: print all tags without filter (araszka)
+- Fix lookaside upload when --path is specified (araszka)
+- Lookaside: encoding repo name to UTF-8 (araszka)
+- Fix errors on Python 2.6 (lsedlar)
+- Add test and docstring to byte offset convertor (araszka)
+- Decode .spec file with UTF-8 (araszka)
+- 1271741 - add copr command (Recommends: copr-cli) (msuchy)
+- Suggest --target option when unknown target (araszka)
+
+* Thu Feb 04 2016 Fedora Release Engineering <releng@fedoraproject.org> - 1.40-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
+
+* Fri Oct 23 2015 Pavol Babincak <pbabinca@redhat.com> - 1.40-1
+- don't use assertRaises (ttomecek)
+- refactor test_clone: set clone config in the same test file (pbabinca)
+- Fix clone test to not use constructor to set clone_config (pbabinca)
+- Fix test clone test (pbabinca)
+- Make use of clone_config attribute backwards compatible (pbabinca)
+
+* Thu Oct 22 2015 Pavol Babincak <pbabinca@redhat.com> - 1.39-1
+- Replace deprecated BaseException.message with str(BaseException) (pbabinca)
+- Don't print exception message during check repo tests (pbabinca)
+- Add support for setting post-clone git config (ville.skytta)
+
+* Wed Oct 21 2015 Pavol Babincak <pbabinca@redhat.com> - 1.38-1
+- Fix parse error (pbabinca)
+
+* Wed Oct 21 2015 Pavol Babincak <pbabinca@redhat.com> - 1.37-1
+- Add support for --nocheck (orion)
+- container-build: check repo (ttomecek)
+- move repo checking to a method (ttomecek)
+- Add 'oxt' and 'xpi' extensions to UPLOADEXTS (dsilakov)
+- Switch-branch: give more info about error (araszka)
+- Recognize binary files with .oxt and .xpi extensions (dsilakov)
+- Container-build: add --nowait option (araszka)
+- bash autocompletion: support for command container-build-config (pbabinca)
+- Implement getter for autorebuild value, use 'true' and 'false' for values
+ (bkabrda)
+- Add a command and option to change container build setup (bkabrda)
+- Edit tests for python2.6 - EL6 (araszka)
+- tests: Don't use assertNotIn (araszka)
+- tests: Don't use assertRaises as context manager (araszka)
+- tests: Don't use check_output (araszka)
+- Typo in import --help descriptions (araszka)
+- change the url for rpkg (dennis)
+
+* Wed Jul 15 2015 Pavol Babincak <pbabinca@redhat.com> - 1.36-1
+- container-build: support yum repos with --build-with=koji (pbabinca)
+- container-build: move --scratch option to koji group (pbabinca)
+- Print task info for container-build (pbabinca)
+
+* Thu Jun 18 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.35-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
+
+* Tue May 26 2015 Dennis Gilmore <dennis@ausil.us> - 1.35-2
+- pyrpkg Requires python-osbs
+
+* Tue May 26 2015 Pavol Babincak <pbabinca@redhat.com> - 1.35-1
+- Test for scratch opt in the actual argument of container_build_koji
+ (pbabinca)
+- Move the GitIgnore class to its own module (bochecha)
+- Modernize the gitignore-handling code (bochecha)
+- gitignore: Properly handle adding matching lines (bochecha)
+- Refactor: remove unnecessary code (pbabinca)
+- Move custom UnknownTargetError to errors module (pbabinca)
+- New command: container-build (jluza)
+- lookaside: Take over file uploads (bochecha)
+- Remove unnecessary log message (bochecha)
+- Stop making source files read-only (bochecha)
+- Drop some useless comments (bochecha)
+- Only report we're uploading when we actually are (bochecha)
+- lookaside: Check if a file already was uploaded (bochecha)
+- lookaside: Allow client-side and custom CA certificates (bochecha)
+- lookaside: Be more flexible when building the download URL (bochecha)
+- lookaside: Use the hashtype for the URL interpolation (bochecha)
+- lookaside: Add a progress callback (bochecha)
+- lookaside: Handle downloading of source files (bochecha)
+- lookaside: Move handling of file verification (bochecha)
+- lookaside: Move handling of file hashing (bochecha)
+- utils: Add a new warn_deprecated helper (bochecha)
+- Add a new lookaside module (bochecha)
+- Add a new utils module (bochecha)
+- Properly set the logger (bochecha)
+- Move our custom errors to their own module (bochecha)
+- Don't assume MD5 for the lookaside cache (bochecha)
+- Remove dead code (bochecha)
+- Use the proper exception syntax (bochecha)
+
+* Thu Apr 16 2015 Pavol Babincak <pbabinca@redhat.com> - 1.34-1
+- tests: Don't use assertIsNone (bochecha)
+- tests: Don't use assertRaises as a context manager (bochecha)
+- Add long --verbose option to -v, new --debug and -d option (pbabinca)
+
+* Mon Apr 13 2015 Pavol Babincak <pbabinca@redhat.com> - 1.33-1
+- New mockbuild options: --no-clean --no-cleanup-after (jskarvad)
+- Catch ssl auth problems and print more helpful messages (pbabinca)
+- New exception - rpkgAuthError to allow clients detect auth problems
+ (pbabinca)
+
+* Mon Mar 23 2015 Pavol Babincak <pbabinca@redhat.com> - 1.32-1
+- tests: Properly open/close the file (bochecha)
+- sources: Support writing in either the old or new format (bochecha)
+- sources: Reindent code (bochecha)
+
+* Fri Mar 06 2015 Pavol Babincak <pbabinca@redhat.com> - 1.31-1
+- Refactor: remove unused imports from test_sources (pbabinca)
+- Don't do several times the same thing (bochecha)
+- sources: Forbid mixing hash types (bochecha)
+- sources: Move to the new file format (bochecha)
+- Rewrite the sources module (bochecha)
+
+* Wed Dec 03 2014 Pavol Babincak <pbabinca@redhat.com> - 1.30-2
+- Use %%{__python} instead of %%{__python2} as it might be not defined
+
+* Wed Oct 08 2014 Pavol Babincak <pbabinca@redhat.com> - 1.30-1
+- add python-nose as BuildRequires as run tests in check section (pbabinca)
+- pass extra data to the Commands object via properties instead of __init__()
+ (mikeb)
+- clean up Koji login, and properly support password auth (mikeb)
+- add --runas option (mikeb)
+- run os.path.expanduser on the kojiconfig attribute in case the path is in the
+ user's home directory (bstinson)
+- Override GIT_EDITOR in tests (pbabinca)
+- Massive Flake8 fix (bochecha)
+- Fix some more Flake8 issues (bochecha)
+- Fix some flake8 issues (bochecha)
+- Simplify some code (bochecha)
+- Fix typo (bochecha)
+- tests: Ensure functioning of Commands.list_tag (bochecha)
+- list_tags: Stop executing a command (bochecha)
+- list_tags: Fix the docstring (bochecha)
+- delete_tag: Stop executing a command (bochecha)
+- tests: Ensure functioning of Commands.delete_tag (bochecha)
+- add_tag: Run the tag command in the right directory (bochecha)
+- tests: Ensure proper functioning of Commands.add_tag (bochecha)
+- tests: Factor out some code (bochecha)
+- tests: Ensure functioning of Commands.clone (bochecha)
+- gitignore: Make sure each line ends with a \n (bochecha)
+- gitignore: We're not modified any more after we wrote to disk (bochecha)
+- tests: Ensure proper functioning of GitIgnore (bochecha)
+- tests: Use nose (bochecha)
+- Remove unused import (bochecha)
+- Some more PEP8 (bochecha)
+- Add classifiers to setup.py (pbabinca)
+- Add new sources file parser even with unit tests (pbabinca)
+- If source file doesn't exist continue without downloading files (pbabinca)
+- Reformat setup.py to be compliant with PEP 8 (pbabinca)
+
+* Tue Sep 30 2014 Pavol Babincak <pbabinca@redhat.com> - 1.28-1
+- Compare fuller remote branch name with local branch before build
+
+* Fri Sep 26 2014 Pavol Babincak <pbabinca@redhat.com> - 1.27-1
+- Explicitly define pyrpkg's client name for man pages (pbabinca)
+- Refactor mock results dir to property (pbabinca)
+- Add skip-diffs option for import_srpms (lars)
+- Properly remove possible .py when creating man pages (lars)
+- Process srpm imports to empty repositories more explicitly (pbabinca)
+- Make UPLOADEXTS a class variable that can be extended (lars)
+- Introduce self.default_branch_remote for fresh clones (pbabinca)
+- On self.path change reset properties which could used old value (pbabinca)
+- Remove empty entry from git ls-files to not confuse following code (pbabinca)
+- Remove file names during srpm import in more extensible way (pbabinca)
+- Fix issue causing all current local builds via fedpkg to use md5 rather than
+ sha256 (spot)
+- License replaced with official GPL 2.0 license from gnu.org (pbabinca)
+- Allow "rpkg commit -s" (pjones)
+
+* Tue Jul 29 2014 Pavol Babincak <pbabinca@redhat.com> - 1.26-1
+- rpkg doesn't have a python module so use pyrpkg instead (pbabinca)
+
+* Tue Jul 29 2014 Pavol Babincak <pbabinca@redhat.com> - 1.25-1
+- 1.25 release (pbabinca)
+- Note to do_imports() doc. (pbabinca)
+- Change default option for switch-branch from --no-fetch to --fetch (pbabinca)
+- Allow default name of the library to be set by subclasses (pbabinca)
+- Use name attribute of cliClient to get configuration (pbabinca)
+- Make setup.py executable (pbabinca)
+- Use direct git call for fetches (pbabinca)
+- Print reason for failed switch-branch (pbabinca)
+- Match whole branch with remote name when switching branch (pbabinca)
+- Refactor: deduplicate remote & branch_merge (pbabinca)
+- De-hardcode 'origin' as the remote name (bochecha)
+- Fallback the remote on 'origin' (bochecha)
+
+* Mon Jun 09 2014 Pavol Babincak <pbabinca@redhat.com> - 1.24-1
+- 1.24 release (pbabinca)
+- Work around signed srpms (Till Maas)
+- Properly raise the error (bochecha)
+- Ability to skip NVR construction altogether for builds (pbabinca)
+- If we failed to parse NVRE from rpm output use better error message
+ (pbabinca)
+- If command to get NVRE printed anything to stderr log that command (pbabinca)
+- Refactor: correctly split string on multi lines (pbabinca)
+- Use nvr_check as an optional argument for build (pbabinca)
+- 1.23 release (pbabinca)
+- Use module_name setter instead of constructor parameter (pbabinca)
+- Set pushurl & branch_remote by default (pbabinca)
+- 1.22 release (pbabinca)
+- Define module name from command line, git url and lastly from spec (pbabinca)
+- Revert "Define module name from command line, git url and lastly from spec"
+ (pbabinca)
+
+* Sun Jun 08 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.21-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
+
+* Mon Mar 24 2014 Pavol Babincak <pbabinca@redhat.com> - 1.21-1
+- Refactor: split strings on multi lines without spaces from indentation
+ (pbabinca)
+- Refactor: remove spaces at the end of lines (pbabinca)
+- Define module name from command line, git url and lastly from spec (pbabinca)
+- Option to skip NVR existence check in build system before build (pbabinca)
+- Add an 'epoch' property to pyrpkg.Commands (bochecha)
+- Fetch remotes before switch-branch by default (pbabinca)
+- Protect rhpkg's --arches argument (pbabinca)
+
+* Tue Feb 18 2014 Dennis Gilmore <dennis@ausil.us> - 1.20-1
+- read krbservice from the koji config file (dennis)
+- We can assume that rpkg is installed if the (ville.skytta)
+- clog: Don't require empty line between changelog entries. (ville.skytta)
+- Spelling fixes. (ville.skytta)
+- expand %%{name} and %%{verion} macros when checking for unused_patches check
+ for .patch and .diff files as patches (dennis)
+- clean up some language ambiguities (dennis)
+- clog: Support %%changelog tag written in non-lowercase. (ville.skytta)
+- add spkg as a binary file extention rhbz#972903 (dennis)
+- Fixed version to 1.19 (pbabinca)
+- Don't track spec file here (pbabinca)
+- 1.20 (pbabinca)
+- Mock config temp dir in the form $(target)-$(localarch).$(mktemp)mockconfig
+ (pbabinca)
+
+* Sun Aug 04 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.19-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
+
+* Mon Apr 08 2013 Pavol Babincak <pbabinca@redhat.com> - 1.19-1
+- Generate mock-config for mockbuild if needed (rhbz#856928) (pbabinca)
+
+* Thu Feb 14 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.18-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
+
+* Fri Aug 10 2012 Robert Scheck <robert@fedoraproject.org> - 1.18-3
+- Require %%{version}-%%{release} rather %%{name}-%%{version}
+
+* Sat Jul 21 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.18-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
+
+* Mon Apr 16 2012 Jesse Keating <jkeating@redhat.com> - 1.18-1
+- Use rpmdefines when querying for package name
+
+* Mon Apr 09 2012 Jesse Keating <jkeating@redhat.com> - 1.17-1
+- Don't assume master branch for chain builds (jkeating)
+
+* Mon Mar 26 2012 Jesse Keating <jkeating@redhat.com> - 1.16-1
+- Only read from .koji/config (jkeating)
+
+* Wed Mar 21 2012 Jesse Keating <jkeating@redhat.com> - 1.15-1
+- Fix branch push warning (jkeating)
+- Handle CVS based builds when getting build hash (jkeating)
+
+* Mon Mar 12 2012 Jesse Keating <jkeating@redhat.com> - 1.14-1
+- Warn if the checked out branch cannot be pushed (jkeating)
+- Warn if commit or tag fails and we don't push (#21) (jkeating)
+- Honor ~/.koji/config (rhbz#785776) (jkeating)
+- Update help output for switch-branch (rhbz#741742) (jkeating)
+
+* Thu Mar 01 2012 Jesse Keating <jkeating@redhat.com> - 1.13-1
+- Return proper exit code from builds (#20) (jkeating)
+- Fix md5 option in the build parser (jkeating)
+- More completion fixes (jkeating)
+- Add mock-config and mockbuild completion (jkeating)
+- Simplify test for rpkg availability. (ville.skytta)
+- Fix ~/... path completion. (ville.skytta (jkeating)
+- Add a --raw option to clog (#15) (jkeating)
+- Make things quiet when possible (jkeating)
+- Fix up figuring out srpm hash type (jkeating)
+- Allow defining an alternative builddir (jkeating)
+- Conflict with older fedpkg (jkeating)
+- Attempt to automatically set the md5 flag (jkeating)
+- Use -C not -c for config. (#752411) (jkeating)
+- Don't check gpg sigs when importing srpms (ticket #16) (jkeating)
+- Enable md5 option in mockbuild (twaugh) (jkeating)
+
+* Tue Jan 24 2012 Jesse Keating <jkeating@redhat.com> - 1.12-1
+- Fix mock-config (ticket #13) (jkeating)
+- Make md5 a common build argument (jkeating)
+- Move arches to be a common build argument (ticket #3) (jkeating)
+- Find remote branch to track better (jkeating)
+
+* Fri Jan 13 2012 Jesse Keating <jkeating@redhat.com> - 1.11-1
+- Change clog output to be more git-like (sochotnicky)
+- Fix mockconfig property (bochecha)
+- Use only new-style classes everywhere. (bochecha)
+- Testing for access before opening a file is unsafe (bochecha)
+- Add a gitbuildhash command (jkeating)
+- Always make sure you have a absolute path (aj) (jkeating)
+- don't try to import brew, just do koji (jkeating)
+
+* Mon Nov 21 2011 Jesse Keating <jkeating@redhat.com> - 1.10-1
+- Use -C for --config shortcut (jkeating)
+- Don't leave a directory on failure (#754082) (jkeating)
+- Fix chain build (#754189) (jkeating)
+- Don't hardcode brew here (jkeating)
+
+* Mon Nov 07 2011 Jesse Keating <jkeating@redhat.com> - 1.9-1
+- Don't upload if there is nothing to upload. (jkeating)
+- --branch option for import is not supported yet (jkeating)
+- Add epilog about mock-config generation (jkeating)
+- Don't assume we can create a folder named after the module. (bochecha)
+- Fix passing the optional mock root to mockbuild (bochecha)
+- Add missing registration for mockbuild target (bochecha)
+- Make the clean target work with --path. (bochecha)
+- Fix typo in a comment. (bochecha)
+- Fix syntax error in main script. (bochecha)
+- Fix typo. (bochecha)
+
+* Fri Oct 28 2011 Jesse Keating <jkeating@redhat.com> - 1.8-1
+- Get more detailed error output from lookaside (jkeating)
+- Move the curl call out to it's own function (jkeating)
+- Hide build_common from help/usage (jkeating)
+- Fix the help command (jkeating)
+
+* Tue Oct 25 2011 Jesse Keating <jkeating@redhat.com> - 1.7-1
+- Support a manually specified mock root (jkeating)
+- Add a mock-config subcommand (jkeating)
+- Fix a traceback on error. (jkeating)
+- Remove debugging code (jkeating)
+- More git api updates (jkeating)
+- Add topurl as a koji config and property (jkeating)
+- Add a mockconfig property (jkeating)
+- Turn the latest commit into a property (jkeating)
+
+* Tue Sep 20 2011 Jesse Keating <jkeating@redhat.com> - 1.6-1
+- Allow name property to load by itself (jkeating)
+
+* Mon Sep 19 2011 Jesse Keating <jkeating@redhat.com> - 1.5-1
+- Fix tag listing (#717528) (jkeating)
+- Revamp n-v-r property loading (#721389) (jkeating)
+- Don't use os.getlogin (jkeating)
+- Code style changes (jkeating)
+- Allow fedpkg lint to be configurable and to check spec file. (pingou)
+- Handle non-scratch srpm builds better (jkeating)
+
+* Wed Aug 17 2011 Jesse Keating <jkeating@redhat.com> - 1.4-1
+- Be more generic when no spec file is found (jkeating)
+- Hint about use of git status when dirty (jkeating)
+- Don't use print when we can log.info it (jkeating)
+- Don't exit from a library (jkeating)
+- Do the rpm query in our module path (jkeating)
+- Use git's native ability to checkout a branch (jkeating)
+- Use keyword arg with clone (jkeating)
+- Allow the on-demand generation of an srpm (jkeating)
+- Fix up exit codes (jkeating)
+
+* Mon Aug 01 2011 Jesse Keating <jkeating@redhat.com> - 1.3-1
+- Fix a debug string (jkeating)
+- Set the right property (jkeating)
+- Make sure we have a default hashtype (jkeating)
+- Use underscore for the dist tag (jkeating)
+- Fix the kojiweburl property (jkeating)
+
+* Wed Jul 20 2011 Jesse Keating <jkeating@redhat.com> - 1.2-1
+- Fill out the krb_creds function (jkeating)
+- Fix the log message (jkeating)
+- site_setup is no longer needed (jkeating)
+- Remove some rhtisms (jkeating)
+- Wire up the patch command in client code (jkeating)
+- Add a patch command (jkeating)
+
+* Fri Jun 17 2011 Jesse Keating <jkeating@redhat.com> - 1.1-2
+- Use version macro in files
+
+* Fri Jun 17 2011 Jesse Keating <jkeating@redhat.com> - 1.1-1
+- New tarball release with correct license files
+
+* Fri Jun 17 2011 Jesse Keating <jkeating@redhat.com> - 1.0-2
+- Fix up things found in review
+
+* Tue Jun 14 2011 Jesse Keating <jkeating@redhat.com> - 1.0-1
+- Initial package
diff --git a/sources b/sources
new file mode 100644
index 0000000..d98b3f9
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+SHA512 (rpkg-1.66.tar.gz) = 14a6947146cd5a8f9baa2d3fba0a37bb0d7ab5bd69e29c04282c882e1f249831c8faf443d4dd94adfe1bf385f6525cefef84b10d44a3949d815fd293d5f5fccc
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-08-10 21:44 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-08-10 21:44 [rpms/rpkg] 1.70-1: Revert "Orphaned for 6+ weeks"
-- strict thread matches above, loose matches on Subject: below --
2026-08-10 21:44
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox