Compare commits

...
Sign in to create a new pull request.

57 commits

Author SHA1 Message Date
Fabio Valentini
62a3f4726e
Revert to last stable release; Fixes RHBZ#2387173
The bump to a git snapshot of upstream commit 83b35ac was never
built except during the F43 mass rebuild, and actually introduced
regressions.
2025-08-09 17:24:22 +02:00
Mark Wielaard
1b8f9ed759 Fix F43 FTBFS - Add BuildRequires for autoreconf
Patch1002 needs autoreconf, see %build.
Add autoconf and automake BuildRequires.

Resolves: #2385580
rpmdevtools: FTBFS in Fedora rawhide/f43
https://bugzilla.redhat.com/show_bug.cgi?id=2385580
2025-08-04 22:23:25 +02:00
Fedora Release Engineering
6ce9455bd6 Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild 2025-07-25 12:07:10 +00:00
Jens Petersen
2e6a03f01b update to latest git 83b35ac changes 2025-01-23 16:10:01 +08:00
Fedora Release Engineering
866bfe8ed5 Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild 2025-01-18 22:43:28 +00:00
Fedora Release Engineering
60f1fea2fb Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild 2024-07-19 18:49:52 +00:00
Fedora Release Engineering
dd63de6d12 Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild 2024-01-26 16:21:43 +00:00
Fedora Release Engineering
401ab23b44 Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild 2024-01-22 11:59:47 +00:00
Petr Písař
dc545ca948 Convert a license tag to SPDX format 2023-08-25 10:27:18 +02:00
Fedora Release Engineering
3f4f7d2e30 Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2023-07-21 17:05:42 +00:00
Yaakov Selkowitz
302155c304 Import C9S changes
This drops the unwanted fakeroot and python3-progressbar2 dependencies
from RHEL/ELN builds, and also removes obsolete F<36 conditionals.
2023-04-18 22:53:08 -04:00
Fedora Release Engineering
af0e25c44d Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2023-01-20 19:57:40 +00:00
Troy Dawson
6331051938 Fix bad conditional 2022-10-13 09:33:54 -07:00
Fedora Release Engineering
daaa5ba8a6 Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2022-07-23 01:02:30 +00:00
Neal Gompa
d2e1b48630 Update to 9.6 2022-02-04 18:03:30 -05:00
Fedora Release Engineering
ab2c7755dc - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2022-01-21 18:02:38 +00:00
Jerry James
02ad6bd4b1 Drop XEmacs support in F36 and later 2021-11-09 19:26:06 -07:00
Fedora Release Engineering
66116af6c1 - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2021-07-23 11:36:34 +00:00
Neal Gompa
a98cb59a66 Update to 9.5 2021-07-17 12:32:36 -04:00
Neal Gompa
e77bf671a5 Update to 9.4 2021-07-17 07:38:38 -04:00
Miro Hrončok
5e5734dc7e Require any Python version of the Python packages
When we update Python, rpmdevtools should not need a rebuild.
They install to Python version agnostic directories.

Hence, they need python3dist() packages, not python3.Xdist().
2021-02-15 15:06:39 +01:00
Fedora Release Engineering
4ae7f0e5c8 - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2021-01-27 15:27:39 +00:00
Miro Hrončok
26bfd64822 spectool: Download text as text 2021-01-25 12:40:27 +01:00
Michal Domonkos
fe6aa3d1c8 Replace requests-download dependency with requests
Respective upstream change:
https://pagure.io/rpmdevtools/pull-request/74
2021-01-22 11:33:15 +01:00
Neal Gompa
9d1d240447 Force legacy datestamp by default until rhbz#1715412 is resolved 2021-01-20 07:02:55 -05:00
Neal Gompa
d5f84e780e Update to 9.3 2021-01-20 07:02:55 -05:00
Tom Stellard
a08b8cede8 Add BuildRequires: make
https://fedoraproject.org/wiki/Changes/Remove_make_from_BuildRoot
2021-01-08 20:53:32 +00:00
Neal Gompa
7f9552cabf Update to 9.2 2020-10-05 18:45:58 -04:00
Neal Gompa
b679b19442 Update to 9.1 2020-08-20 07:25:04 -04:00
Fedora Release Engineering
bd1538f372 - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2020-07-29 05:55:48 +00:00
Neal Gompa
97e6f2e98d Backport fix for python spec template 2020-07-16 11:20:41 -04:00
Neal Gompa
6bbfd36f3c Update to 9.0 2020-07-14 22:04:19 -04:00
Troy Dawson
28701c0ee0 Minor conditional tweak for ELN
Signed-off-by: Troy Dawson tdawson@redhat.com
2020-07-07 15:35:50 +00:00
Jitka Plesnikova
5d3221a2cc Add perl dependencies needed for build 2020-03-25 14:42:54 +01:00
Fedora Release Engineering
cabbc608ac - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2020-01-30 17:52:38 +00:00
Fedora Release Engineering
acb4cf9573 - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2019-07-26 18:46:22 +00:00
Fedora Release Engineering
6df4896829 - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2019-02-02 11:35:38 +00:00
Neal Gompa
a488e997ab Fix regex substitution issues with Python 3.7 (rhbz#1651954) 2018-11-28 23:10:30 -05:00
Neal Gompa
e47f8797e3 Actually add the patch 2018-09-16 07:04:12 -04:00
Neal Gompa
f43651e736 Fix regex related deprecation warnings (rhbz#1598089) 2018-09-16 07:03:23 -04:00
Fedora Release Engineering
3db610549f - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2018-07-14 03:44:04 +00:00
Fedora Release Engineering
d65daa3d50 - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2018-02-09 13:19:09 +00:00
Fedora Release Engineering
154304be4d - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild 2017-07-27 13:16:48 +00:00
Fedora Release Engineering
98732e8e31 - Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild 2017-02-11 11:51:13 +00:00
Ville Skyttä
be5fa647cd Update to 8.10 2017-01-14 13:35:08 +02:00
Ville Skyttä
d05045c447 Point URLs to pagure 2017-01-14 13:34:18 +02:00
Ville Skyttä
0032c5270d Fix non-fedora python3 bcond 2017-01-14 13:34:07 +02:00
Ville Skyttä
7fba799422 Clean up obsolete Fedora version check 2017-01-14 13:33:47 +02:00
Miro Hrončok
4f5745c71e Rebuild for Python 3.6 2016-12-19 18:20:38 +01:00
Ville Skyttä
85d8faeb9b Update to 8.9 2016-06-25 15:48:40 +03:00
Ville Skyttä
c257bf7df7 Update to 8.8 2016-06-25 13:10:18 +03:00
Petr Písař
6c092c945e Mandatory Perl build-requires added <https://fedoraproject.org/wiki/Changes/Build_Root_Without_Perl> 2016-06-24 10:14:18 +02:00
Ville Skyttä
314247a49a Work around bug in 8.7's rpmdev-bumpspec.1 build 2016-06-23 19:50:21 +03:00
Ville Skyttä
e5fa722014 Upload source 2016-06-23 19:00:38 +03:00
Ville Skyttä
72a6c0f3cb Update to 8.7
- Specfile cleanups
2016-06-23 18:59:47 +03:00
Fedora Release Engineering
90de409997 - Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild 2016-02-04 22:18:41 +00:00
Ville Skyttä
f5a5863426 Use python3 on > F-22 2015-06-17 13:57:43 +03:00
6 changed files with 933 additions and 41 deletions

View file

@ -0,0 +1,39 @@
From 4a4693c842b6da5d66e3a6bdb1eb7914d2402f7f Mon Sep 17 00:00:00 2001
From: Neal Gompa <ngompa13@gmail.com>
Date: Wed, 20 Jan 2021 06:50:03 -0500
Subject: [PATCH] Force legacy datestamp while RHBZ#1715412 is still an issue
---
rpmdev-bumpspec | 2 +-
rpmdev-newspec.in | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/rpmdev-bumpspec b/rpmdev-bumpspec
index dc4eb05..3e18b41 100755
--- a/rpmdev-bumpspec
+++ b/rpmdev-bumpspec
@@ -300,7 +300,7 @@ the Free Software Foundation; either version 2 of the License, or
parser.add_option("-n", "--new",
help="set new version and reset/set release "
"(simple spec files only)")
- parser.add_option("-D", "--legacy-datestamp", default=False, action='store_true',
+ parser.add_option("-D", "--legacy-datestamp", default=True, action='store_true',
help="use legacy datestamp for changelog entries")
parser.add_option("-d", "--datestamp",
help="changelog date string (default: today)")
diff --git a/rpmdev-newspec.in b/rpmdev-newspec.in
index 27af10f..a083dd9 100644
--- a/rpmdev-newspec.in
+++ b/rpmdev-newspec.in
@@ -293,7 +293,7 @@ if [[ $NEWSPEC_PREFER_MACROS ]] ; then
"
fi
-if [[ $rpmver -ge 41400 ]] && [[ -z $NEWSPEC_LEGACY_DATESTAMP ]] ; then # >= 4.14 (RHEL >= 8, Fedora >= 27)
+if [[ $rpmver -ge 41400 ]] && [[ $(/bin/false) ]] ; then # >= 4.14 (RHEL >= 8, Fedora >= 27)
chlog="s|^%changelog\\s*|%changelog\\n* $(LC_ALL=C date +'%a %b %d %T %Z %Y') $(rpmdev-packager)\\n- |Mg"
else
chlog="s|^%changelog\\s*|%changelog\\n* $(LC_ALL=C date --utc +'%a %b %d %Y') $(rpmdev-packager)\\n- |Mg"
--
2.29.2

View file

@ -0,0 +1,531 @@
diff --git a/Makefile.am b/Makefile.am
index bb6f7c6..d55f397 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -15,7 +15,7 @@ man8_MANS = rpmdev-rmdevelrpms.8
dist_pkgsysconf_DATA = curlrc newspec.conf rmdevelrpms.conf \
spectemplate-lib.spec spectemplate-minimal.spec \
spectemplate-perl.spec spectemplate-php-pear.spec \
- spectemplate-python.spec spectemplate-ruby.spec \
+ spectemplate-python.spec spectemplate-pyproject.spec spectemplate-ruby.spec \
spectemplate-ocaml.spec spectemplate-R.spec spectemplate-dummy.spec \
template.init
diff --git a/rpmdev-bumpspec b/rpmdev-bumpspec
index b8f4047..5a6a909 100755
--- a/rpmdev-bumpspec
+++ b/rpmdev-bumpspec
@@ -27,8 +27,10 @@ import time
try:
from rpmautospec import specfile_uses_rpmautospec
+ from rpmautospec.subcommands.release import calculate_release_number
except ImportError:
specfile_uses_rpmautospec = None
+ calculate_release_number = None
__version__ = "1.0.13"
@@ -378,19 +380,25 @@ the Free Software Foundation; either version 2 of the License, or
# Not actually a parser error, but... meh.
parser.error(e)
- uses_rpmautospec = False
+ uses_rpmautospec_autorelease = uses_rpmautospec_autochangelog = False
if specfile_uses_rpmautospec:
- uses_rpmautospec = specfile_uses_rpmautospec(
+ uses_rpmautospec_autorelease = specfile_uses_rpmautospec(
specpath=s.filename,
check_autorelease=True,
check_autochangelog=False
)
+ uses_rpmautospec_autochangelog = specfile_uses_rpmautospec(
+ specpath=s.filename,
+ check_autorelease=False,
+ check_autochangelog=True
+ )
- if uses_rpmautospec:
+ changed = False
+ if uses_rpmautospec_autorelease:
if opts.new:
print("RPMAutoSpec usage detected, only setting Version.")
changed = s.newVersion(opts.new, set_release=False)
- else:
+ elif uses_rpmautospec_autochangelog:
print("RPMAutoSpec usage detected, not changing the spec file.")
continue
else:
@@ -405,14 +413,12 @@ the Free Software Foundation; either version 2 of the License, or
changed = True
- # If we didn't change anything, no need to write and modify the
- # changelog.
if changed:
+ # Write out changed version or release if changed.
s.writeFile(aspec)
- else:
- continue
- if uses_rpmautospec:
+ if uses_rpmautospec_autochangelog:
+ print("RPMAutospec %autochangelog is used, no need to add %changelog entry.")
continue
if not s.checkChangelogPresence():
@@ -422,6 +428,10 @@ the Free Software Foundation; either version 2 of the License, or
# Get EVR for changelog entry.
cmd = ("rpm", "-q", "--specfile", "--define", "dist %{nil}",
"--qf=%|epoch?{%{epoch}:}:{}|%{version}-%{release}\n", aspec)
+ if not opts.new and calculate_release_number and uses_rpmautospec_autorelease:
+ # Rpmautospec doesnt see a change yet so the calculated number will be one too low.
+ release_number = calculate_release_number(aspec) + 1
+ cmd += ("--define", "_rpmautospec_release_number {}".format(release_number))
popen = subprocess.Popen(cmd, stdout=subprocess.PIPE)
evr = popen.communicate()[0].split(b"\n")[0]
if sys.version_info[0] > 2:
diff --git a/rpmdev-spectool b/rpmdev-spectool
index 1d57256..2c06ef8 100755
--- a/rpmdev-spectool
+++ b/rpmdev-spectool
@@ -25,7 +25,9 @@ import os
import tempfile
import time
from collections import OrderedDict
-from typing import Optional
+from typing import Any, Callable, Dict, List, Optional
+from typing import OrderedDict as OrderedDictT
+from typing import Tuple
from urllib.parse import urlparse
import progressbar
@@ -46,13 +48,13 @@ anything about missing sources or patches). The plan is to catch errors like
this in spectool itself and warn the user about it in the future."""
-def complete_spec_paths(prefix, **kwargs):
+def complete_spec_paths(prefix, **kwargs) -> List[str]:
import glob
return glob.glob(prefix + "*.spec")
-def get_args() -> dict:
+def get_args() -> Dict[str, Any]:
try:
import argcomplete
except ImportError:
@@ -191,6 +193,15 @@ def get_args() -> dict:
help="output debug info, don't clean up when done",
)
+ misc.add_argument(
+ "--http-header",
+ "-H",
+ action="append",
+ dest="headers",
+ default=[],
+ help="Optionally add custom headers",
+ )
+
specfile = parser.add_argument("specfile", action="store")
if argcomplete:
@@ -202,17 +213,17 @@ def get_args() -> dict:
return vars(parser.parse_args())
-def split_numbers(args: str) -> list:
+def split_numbers(args: str) -> List[str]:
return args.split(",")
# simple streamed file download progress tracker inspired by requests_download
class ProgressTracker:
- def __init__(self, progress_bar: progressbar.ProgressBar):
+ def __init__(self, progress_bar: progressbar.ProgressBar) -> None:
self.progress_bar = progress_bar
self.received = 0
- def on_start(self, response: requests.Response):
+ def on_start(self, response: requests.Response) -> None:
max_value = None
if "content-length" in response.headers:
@@ -221,7 +232,7 @@ class ProgressTracker:
self.progress_bar.start(max_value=max_value)
self.received = 0
- def on_chunk(self, chunk: bytes):
+ def on_chunk(self, chunk: bytes) -> None:
self.received += len(chunk)
try:
@@ -229,12 +240,13 @@ class ProgressTracker:
except ValueError:
pass
- def on_finish(self):
+ def on_finish(self) -> None:
self.progress_bar.finish()
# simple streamed file download implementation inspired by requests_download
-def download(url, target, headers=None, tracker: Optional[ProgressTracker] = None):
+def download(url, target, headers=None,
+ tracker: Optional[ProgressTracker] = None) -> None:
if headers is None:
headers = {}
@@ -263,7 +275,8 @@ def download(url, target, headers=None, tracker: Optional[ProgressTracker] = Non
tracker.on_finish()
-def get_file(url: str, path: str, force: bool) -> bool:
+def get_file(url: str, path: str, force: bool,
+ headers: Optional[Dict[str, str]] = None) -> bool:
if os.path.exists(path):
if force:
os.remove(path)
@@ -272,13 +285,13 @@ def get_file(url: str, path: str, force: bool) -> bool:
return False
progress = ProgressTracker(progressbar.DataTransferBar())
- download(url, path, tracker=progress)
+ download(url, path, tracker=progress, headers=headers)
return True
class Spec:
- def __init__(self, path: str):
+ def __init__(self, path: str) -> None:
self.path = path
self.spec = rpm.spec(self.path)
@@ -289,10 +302,10 @@ class Spec:
self.files = list(self.spec.sources)
self.files.sort(key=(lambda file: file[1]))
- self._sources = None
- self._patches = None
+ self._sources: Optional[OrderedDictT[str, str]] = None
+ self._patches: Optional[OrderedDictT[str, str]] = None
- def _files(self, typ) -> OrderedDict:
+ def _files(self, typ: int) -> OrderedDictT[str, str]:
# file is a 3-tuple of (path, number, type)
# type 1: source file
# type 2: patch file
@@ -305,41 +318,42 @@ class Spec:
return files
@property
- def sources(self) -> OrderedDict:
+ def sources(self) -> OrderedDictT[str, str]:
if not self._sources:
self._sources = self._files(1)
return self._sources
@property
- def patches(self) -> OrderedDict:
+ def patches(self) -> OrderedDictT[str, str]:
if not self._patches:
self._patches = self._files(2)
return self._patches
- def print_source(self, number: int, value: str = None):
+ def print_source(self, number: str, value: Optional[str] = None) -> None:
if not value:
value = self.sources[number]
print("Source{}: {}".format(number, value))
- def print_patch(self, number: int, value: str = None):
+ def print_patch(self, number: str, value: Optional[str] = None) -> None:
if not value:
value = self.patches[number]
print("Patch{}: {}".format(number, value))
- def list_sources(self):
+ def list_sources(self) -> None:
for (number, value) in self.sources.items():
self.print_source(number, value)
- def list_patches(self):
+ def list_patches(self) -> None:
for (number, value) in self.patches.items():
self.print_patch(number, value)
@staticmethod
- def _get_file(value: str, directory: str, force: bool, dry: bool):
+ def _get_file(value: str, directory: str, force: bool, dry: bool,
+ headers: Optional[Dict[str, str]] = None) -> None:
parsed = urlparse(value)
if "#" not in value:
@@ -354,19 +368,23 @@ class Spec:
return
if parsed.scheme:
+ if dry:
+ print("Would have downloaded: {}".format(value))
+ return None
if not dry:
path = os.path.join(directory, basename)
try:
print("Downloading: {}".format(value))
os.makedirs(directory, exist_ok=True)
- really = get_file(value, path, force)
+ really = get_file(value, path, force, headers=headers)
if really:
print("Downloaded: {}".format(basename))
except IOError as e:
print("Download failed:")
print(e)
+ raise e
except KeyboardInterrupt:
if os.path.isfile(path):
@@ -376,28 +394,53 @@ class Spec:
print("Download cancelled.")
raise
- else:
- print("Would have downloaded: {}".format(value))
-
- def get_source(self, number: int, directory: str, force: bool, dry: bool, value: str = None):
+ def get_source(self, number: str, directory: str, force: bool, dry: bool,
+ value: Optional[str] = None,
+ headers: Optional[Dict[str, str]] = None) -> bool:
if not value:
value = self.sources[number]
- self._get_file(value, directory, force, dry)
+ try:
+ self._get_file(value, directory, force, dry, headers=headers)
+ return False
+
+ except IOError:
+ return True
- def get_patch(self, number: int, directory: str, force: bool, dry: bool, value: str = None):
+ def get_patch(self, number: str, directory: str, force: bool, dry: bool,
+ value: Optional[str] = None,
+ headers: Optional[Dict[str, str]] = None) -> bool:
if not value:
value = self.patches[number]
- self._get_file(value, directory, force, dry)
+ try:
+ self._get_file(value, directory, force, dry, headers=headers)
+ return False
+
+ except IOError:
+ return True
+
+ def get_sources(self, directory: str, force: bool, dry: bool,
+ headers: Optional[Dict[str, str]] = None):
+ failure = False
- def get_sources(self, directory: str, force: bool, dry: bool):
for number, value in self.sources.items():
- self.get_source(number, directory, force, dry, value)
+ if self.get_source(number, directory, force, dry, value,
+ headers=headers):
+ failure = True
+
+ return failure
+
+ def get_patches(self, directory: str, force: bool, dry: bool,
+ headers: Optional[Dict[str, str]] = None):
+ failure = False
- def get_patches(self, directory: str, force: bool, dry: bool):
for number, value in self.patches.items():
- self.get_patch(number, directory, force, dry, value)
+ if self.get_patch(number, directory, force, dry, value,
+ headers=headers):
+ failure = True
+
+ return failure
def main() -> int:
@@ -484,6 +527,10 @@ def main() -> int:
if args["get_files"]:
force = args["force"]
dry = args["dry_run"]
+ headers = {}
+ for header in args["headers"]:
+ k, sep, v = header.partition(':')
+ headers[k.strip()] = v.strip()
if args["directory"] and args["sourcedir"]:
print("Conflicting requests for download directory.")
@@ -496,18 +543,21 @@ def main() -> int:
else:
directory = os.getcwd()
+ tasks: List[Tuple[Callable[..., bool], Tuple[Any, ...]]] = []
+
if args["source"]:
numbers = split_numbers(args["source"])
for number in numbers:
if number not in spec.sources.keys():
- print("No patch with number '{}' found.".format(number))
+ print("No source with number '{}' found.".format(number))
continue
- spec.get_source(number, directory, force, dry)
+ tasks.append((spec.get_source, (number, directory, force, dry,
+ headers)))
elif args["sources"] and not args["patch"]:
- spec.get_sources(directory, force, dry)
+ tasks.append((spec.get_sources, (directory, force, dry, headers)))
if args["patch"]:
numbers = split_numbers(args["patch"])
@@ -517,10 +567,22 @@ def main() -> int:
print("No patch with number '{}' found.".format(number))
continue
- spec.get_patch(number, directory, force, dry)
+ tasks.append((spec.get_patch, (number, directory, force, dry,
+ headers)))
elif args["patches"] and not args["source"]:
- spec.get_patches(directory, force, dry)
+ tasks.append((spec.get_patches, (directory, force, dry, headers)))
+
+ failure = False
+
+ for task, fargs in tasks:
+ fail = task(*fargs)
+
+ if fail:
+ failure = True
+
+ if failure:
+ return 1
return 0
diff --git a/spectemplate-cmake.spec b/spectemplate-cmake.spec
new file mode 100644
index 0000000..0cdcbb8
--- /dev/null
+++ b/spectemplate-cmake.spec
@@ -0,0 +1,38 @@
+Name:
+Version:
+Release: 1%{?dist}
+Summary:
+
+License:
+URL:
+Source0:
+
+BuildRequires: cmake
+
+%description
+%{summary}.
+
+
+%prep
+%autosetup -q
+
+
+%build
+%cmake
+%cmake_build
+
+
+%install
+%cmake_install
+
+
+%check
+%ctest
+
+
+%files
+%license add-license-file-here
+%doc add-docs-here
+
+
+%changelog
diff --git a/spectemplate-pyproject.spec b/spectemplate-pyproject.spec
new file mode 100644
index 0000000..15d5a65
--- /dev/null
+++ b/spectemplate-pyproject.spec
@@ -0,0 +1,60 @@
+Name: python-...
+Version: ...
+Release: 1%{?dist}
+Summary: ...
+
+License: ...
+URL: https://...
+# use a source from git forge or PyPI:
+Source: %{url}/archive/v%{version}/...-%{version}.tar.gz / %{pypi_source ...}
+
+# for pure Python packages:
+BuildArch: noarch
+# for packages with extension modules:
+BuildRequires: gcc
+
+BuildRequires: python3-devel
+
+%global _description %{expand:
+...}
+
+%description %_description
+
+%package -n python3-...
+Summary: %{summary}
+
+%description -n python3-... %_description
+
+
+%prep
+%autosetup -p1 -n ...-%{version}
+
+
+%generate_buildrequires
+# use the appropriate flags to get all test dependencies:
+%pyproject_buildrequires -x... / -t
+
+
+%build
+%pyproject_wheel
+
+
+%install
+%pyproject_install
+# list the installed top-level Python module names:
+%pyproject_save_files ...
+
+
+%check
+# testing the package is mandatory, at least somehow:
+%tox / %pytest / %pyproject_check_import ...
+
+
+%files -n python3-... -f %{pyproject_files}
+%doc README.*
+# only add LICENSE / COPYING if not included in %%{pyproject_files}
+%license LICENSE / COPYING
+%{_bindir}/...
+
+
+%changelog

133
progressbar.py Normal file
View file

@ -0,0 +1,133 @@
#!/usr/bin/python3
# -*- coding: utf-8 -*-
#
# A simple text-based progress bar, compatible with the basic API of:
# https://github.com/WoLpH/python-progressbar
#
# Copyright (C) 2021 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
# USA.
import shutil
import sys
import time
class ProgressBar:
FORMAT = '{value:>10} / {max_value:<10} [{bars}]'
BARS = '= '
SPINLEN = 5
def __init__(self, stream=sys.stderr, max_width=80, fps=10):
self._stream = stream
self._max_width = max_width
self._min_delay = 1 / fps
@staticmethod
def _format_value(value):
raise NotImplementedError()
def start(self, max_value):
self._value = 0
self._max_value = max_value or 0
self._status = dict()
self._spinner = 0
self._timestamp = 0
self.update(0)
def update(self, value):
self._value = value
if value > self._max_value:
self._max_value = 0
ts = time.time()
if (ts - self._timestamp) < self._min_delay:
return
self._timestamp = ts
status = {'value': self._format_value(value),
'max_value': self._format_value(self._max_value) \
if self._max_value else '???',
'bars': ''}
termw = min(shutil.get_terminal_size()[0], self._max_width)
nbars = max(termw - len(self.FORMAT.format(**status)), 0)
nfill = nskip = 0
if self._max_value:
nfill = round(nbars * value / self._max_value)
elif nbars > self.SPINLEN:
nfill = self.SPINLEN
nskip = self._spinner % (nbars - self.SPINLEN)
self._spinner = nskip + 1
status['bars'] = self.BARS[1] * nskip + \
self.BARS[0] * nfill + \
self.BARS[1] * (nbars - nfill - nskip)
if status == self._status:
return
self._status = status
self._stream.write('\r')
self._stream.write(self.FORMAT.format(**self._status))
self._stream.flush()
def finish(self):
self._max_value = self._value
self._timestamp = 0 # Force an update
self.update(self._value)
self._stream.write('\n')
self._stream.flush()
class DataTransferBar(ProgressBar):
@staticmethod
def _format_value(value):
symbols = ' KMGTPEZY'
depth = 0
max_depth = len(symbols) - 1
unit = 1024.0
# 1023.95 should be formatted as 1.0 (not 1024.0)
# More info: https://stackoverflow.com/a/63839503
thres = unit - 0.05
while value >= thres and depth < max_depth:
depth += 1
value /= unit
symbol = ' %siB' % symbols[depth] if depth > 0 else ''
return '%.1f%s' % (value, symbol)
if __name__ == '__main__':
# Show a dummy bar for debugging purposes
bar = DataTransferBar()
size = 50*1024*1024
chunk = 1024*1234
recvd = 0
bar.start(size)
while recvd < (size - chunk):
recvd += chunk
bar.update(recvd)
time.sleep(0.1)
bar.update(size)
bar.finish()

View file

@ -0,0 +1,21 @@
diff -up rpmdevtools-9.5/Makefile.am.orig rpmdevtools-9.5/Makefile.am
--- rpmdevtools-9.5/Makefile.am.orig 2021-12-10 11:37:29.889405680 +0100
+++ rpmdevtools-9.5/Makefile.am 2021-12-10 11:37:34.637495820 +0100
@@ -1,4 +1,4 @@
-SUBDIRS = emacs qa-robot
+SUBDIRS = emacs
pkgsysconfdir = $(sysconfdir)/rpmdevtools
bashcompdir = @bashcompdir@
diff -up rpmdevtools-9.5/Makefile.in.orig rpmdevtools-9.5/Makefile.in
--- rpmdevtools-9.5/Makefile.in.orig 2021-12-10 11:37:31.073428158 +0100
+++ rpmdevtools-9.5/Makefile.in 2021-12-10 11:37:38.304565439 +0100
@@ -317,7 +317,7 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-SUBDIRS = emacs qa-robot
+SUBDIRS = emacs
pkgsysconfdir = $(sysconfdir)/rpmdevtools
bin_SCRIPTS = rpmdev-newinit rpmdev-newspec rpmdev-rmdevelrpms
dist_bin_SCRIPTS = rpmdev-checksig rpmdev-diff rpmdev-extract rpmdev-md5 \

View file

@ -1,47 +1,63 @@
%global spectool_version 1.0.10
Name: rpmdevtools
Version: 8.6
Release: 1%{?dist}
Version: 9.6
Release: 13%{?dist}
Summary: RPM Development Tools
# rpmdev-setuptree is GPLv2, everything else GPLv2+
License: GPLv2+ and GPLv2
URL: https://fedorahosted.org/rpmdevtools/
Source0: https://fedorahosted.org/released/rpmdevtools/%{name}-%{version}.tar.xz
# rpmdev-md5 and rpmdev-setuptree are GPL-2.0-only,
# everything else is GPL-2.0-or-later.
License: GPL-2.0-or-later AND GPL-2.0-only
URL: https://pagure.io/rpmdevtools
Source0: https://releases.pagure.org/rpmdevtools/%{name}-%{version}.tar.xz
Source1: progressbar.py
# Fedora-specific downstream patches
## Force legacy datestamp by default until rhbz#1715412 is resolved
Patch1001: 0001-Force-legacy-datestamp-while-RHBZ-1715412-is-still-a.patch
# RHEL-specific downstream patches
## Remove fakeroot dependency (rhbz#1905465)
Patch2001: rpmdevtools-9.5-no_qa_robot.patch
BuildArch: noarch
# help2man, pod2man, *python for creating man pages
BuildRequires: make
BuildRequires: help2man
BuildRequires: %{_bindir}/pod2man
BuildRequires: python >= 2.6
BuildRequires: rpm-python
BuildRequires: perl-generators
# python dependencies for spectool
# spectool is executed for creating man page
BuildRequires: python3-devel
%if ! 0%{?rhel}
BuildRequires: python3dist(progressbar2)
%endif
BuildRequires: python3dist(requests)
BuildRequires: python3dist(rpm)
# emacs-common >= 1:22.3-3 for macros.emacs
BuildRequires: emacs-common >= 1:22.3-3
BuildRequires: bash-completion
%if 0%{?fedora}
# xemacs-common >= 21.5.29-8 for macros.xemacs
BuildRequires: xemacs-common >= 21.5.29-8
%endif
Provides: spectool = %{spectool_version}
Requires: curl
Requires: diffutils
%if ! 0%{?rhel}
Requires: fakeroot
%endif
Requires: file
Requires: findutils
Requires: gawk
Requires: grep
Requires: python >= 2.4
Requires: rpm-build >= 4.4.2.3
Requires: rpm-python
Requires: python3dist(argcomplete)
%if ! 0%{?rhel}
Requires: python3dist(progressbar2)
%endif
Requires: python3dist(requests)
Requires: python3dist(rpm)
Requires: sed
Requires: emacs-filesystem
%if 0%{?fedora}
Requires: xemacs-filesystem
%endif
# Optionally support rpmautospec
Recommends: python%{python3_version}dist(rpmautospec)
%description
This package contains scripts and (X)Emacs support files to aid in
This package contains scripts and Emacs support files to aid in
development of RPM packages.
rpmdev-setuptree Create RPM build tree within user's home directory
rpmdev-diff Diff contents of two archives
@ -51,7 +67,7 @@ rpmdev-checksig Check package signatures using alternate RPM keyring
rpminfo Print information about executables and libraries
rpmdev-md5/sha* Display checksums of all files in an archive file
rpmdev-vercmp RPM version comparison checker
spectool Expand and download sources and patches in specfiles
rpmdev-spectool Expand and download sources and patches in specfiles
rpmdev-wipetree Erase all files within dirs created by rpmdev-setuptree
rpmdev-extract Extract various archives, "tar xvf" style
rpmdev-bumpspec Bump revision in specfile
@ -59,36 +75,52 @@ rpmdev-bumpspec Bump revision in specfile
%prep
%setup -q
%autosetup -N
%autopatch -p1 %{!?rhel:-M2000}
grep -lF "%{_bindir}/python " * \
| xargs sed -i -e "s|%{_bindir}/python |%{_bindir}/python3 |"
%if 0%{?rhel}
# Let spectool find the bundled progressbar2 implementation
cp %{SOURCE1} .
sed -i \
's|^\(import progressbar\)$|'\
'import sys\n'\
'sys.path.insert(1, "%{_datadir}/rpmdevtools")\n'\
'\1\nsys.path.pop(1)|' \
rpmdev-spectool
%endif
%build
%configure --libdir=%{_prefix}/lib
make %{?_smp_mflags}
%make_build
%install
rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT
%make_install
echo %%{_datadir}/bash-completion > %{name}.files
[ -d $RPM_BUILD_ROOT%{_sysconfdir}/bash_completion.d ] && \
[ -d %{buildroot}%{_sysconfdir}/bash_completion.d ] && \
echo %%{_sysconfdir}/bash_completion.d > %{name}.files
%if 0%{?fedora}
for dir in %{_emacs_sitestartdir} %{_xemacs_sitestartdir} ; do
%else
for dir in %{_emacs_sitestartdir} ; do
%endif
install -dm 755 $RPM_BUILD_ROOT$dir
ln -s %{_datadir}/rpmdevtools/rpmdev-init.el $RPM_BUILD_ROOT$dir
touch $RPM_BUILD_ROOT$dir/rpmdev-init.elc
install -dm 755 %{buildroot}$dir
ln -s %{_datadir}/rpmdevtools/rpmdev-init.el %{buildroot}$dir
touch %{buildroot}$dir/rpmdev-init.elc
done
# For backwards compatibility
ln -sr %{buildroot}%{_bindir}/rpmdev-spectool %{buildroot}%{_bindir}/spectool
echo ".so man1/rpmdev-spectool.1" > %{buildroot}%{_mandir}/man1/spectool.1
%if 0%{?rhel}
cp %{SOURCE1} %{buildroot}%{_datadir}/rpmdevtools/
%py_byte_compile %{python3} %{buildroot}%{_datadir}/rpmdevtools/
%endif
%files -f %{name}.files
%{!?_licensedir:%global license %%doc}
%license COPYING
%doc NEWS
%config(noreplace) %{_sysconfdir}/rpmdevtools/
@ -96,14 +128,150 @@ done
%{_bindir}/*
%{_emacs_sitestartdir}/rpmdev-init.el
%ghost %{_emacs_sitestartdir}/rpmdev-init.elc
%if 0%{?fedora}
%{_xemacs_sitestartdir}/rpmdev-init.el
%ghost %{_xemacs_sitestartdir}/rpmdev-init.elc
%endif
%{_mandir}/man[18]/*.[18]*
%changelog
* Sat Aug 09 2025 Fabio Valentini <decathorpe@gmail.com> - 9.6-13
- Revert to last stable release
* Mon Aug 04 2025 Mark Wielaard <mjw@fedoraproject.org> - 9.6-12.git83b35ac
- Add BuildRequires for autoreconf, fixes rhbz#2385580
* Fri Jul 25 2025 Fedora Release Engineering <releng@fedoraproject.org> - 9.6-11.git83b35ac
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
* Thu Jan 23 2025 Jens Petersen <petersen@redhat.com> - 9.6-10.git83b35ac
- update to latest git 83b35ac changes
* Sat Jan 18 2025 Fedora Release Engineering <releng@fedoraproject.org> - 9.6-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
* Fri Jul 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 9.6-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Fri Jan 26 2024 Fedora Release Engineering <releng@fedoraproject.org> - 9.6-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Mon Jan 22 2024 Fedora Release Engineering <releng@fedoraproject.org> - 9.6-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Fri Aug 25 2023 Petr Pisar <ppisar@redhat.com> - 9.6-5
- Convert a license tag to SPDX format
* Fri Jul 21 2023 Fedora Release Engineering <releng@fedoraproject.org> - 9.6-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Fri Jan 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 9.6-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Sat Jul 23 2022 Fedora Release Engineering <releng@fedoraproject.org> - 9.6-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Fri Feb 04 2022 Neal Gompa <ngompa@fedoraproject.org> - 9.6-1
- Update to 9.6
* Fri Jan 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 9.5-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Tue Nov 9 2021 Jerry James <loganjerry@gmail.com> - 9.5-3
- Drop XEmacs support in F36 and later
* Fri Jul 23 2021 Fedora Release Engineering <releng@fedoraproject.org> - 9.5-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Sat Jul 17 2021 Neal Gompa <ngompa@fedoraproject.org> - 9.5-1
- Update to 9.5
* Sat Jul 17 2021 Neal Gompa <ngompa@fedoraproject.org> - 9.4-1
- Update to 9.4
* Mon Feb 15 2021 Miro Hrončok <mhroncok@redhat.com> - 9.3-5
- Require any Python version of the Python packages
* Wed Jan 27 2021 Fedora Release Engineering <releng@fedoraproject.org> - 9.3-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Mon Jan 25 2021 Miro Hrončok <mhroncok@redhat.com> - 9.3-3
- spectool: Download text as text
* Fri Jan 22 2021 Michal Domonkos <mdomonko@redhat.com> - 9.3-2
- Replace requests-download dependency with requests
* Wed Jan 20 2021 Neal Gompa <ngompa13@gmail.com> - 9.3-1
- Update to 9.3
- Force legacy datestamp by default until rhbz#1715412 is resolved
* Mon Oct 05 2020 Neal Gompa <ngompa13@gmail.com> - 9.2-1
- Update to 9.2
* Thu Aug 20 2020 Neal Gompa <ngompa13@gmail.com> - 9.1-1
- Update to 9.1
* Wed Jul 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 9.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Thu Jul 16 2020 Neal Gompa <ngompa13@gmail.com> - 9.0-2
- Backport fix for python spec template
* Tue Jul 14 2020 Neal Gompa <ngompa13@gmail.com> - 9.0-1
- Update to 9.0
* Wed Mar 25 2020 Jitka Plesnikova <jplesnik@redhat.com> - 8.10-11
- Add perl dependencies needed for build
* Thu Jan 30 2020 Fedora Release Engineering <releng@fedoraproject.org> - 8.10-10
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Fri Jul 26 2019 Fedora Release Engineering <releng@fedoraproject.org> - 8.10-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Sat Feb 02 2019 Fedora Release Engineering <releng@fedoraproject.org> - 8.10-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Wed Nov 28 2018 Neal Gompa <ngompa13@gmail.com> - 8.10-7
- Fix regex substitution issues with Python 3.7 (rhbz#1651954)
* Sun Sep 16 2018 Neal Gompa <ngompa13@gmail.com> - 8.10-6
- Fix regex related deprecation warnings (rhbz#1598089)
* Sat Jul 14 2018 Fedora Release Engineering <releng@fedoraproject.org> - 8.10-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Fri Feb 09 2018 Fedora Release Engineering <releng@fedoraproject.org> - 8.10-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 8.10-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Sat Feb 11 2017 Fedora Release Engineering <releng@fedoraproject.org> - 8.10-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Sat Jan 14 2017 Ville Skyttä <ville.skytta@iki.fi> - 8.10-1
- Update to 8.10
* Mon Dec 19 2016 Miro Hrončok <mhroncok@redhat.com> - 8.9-2
- Rebuild for Python 3.6
* Sat Jun 25 2016 Ville Skyttä <ville.skytta@iki.fi> - 8.9-1
- Update to 8.9
* Sat Jun 25 2016 Ville Skyttä <ville.skytta@iki.fi> - 8.8-1
- Update to 8.8
* Fri Jun 24 2016 Petr Písař <ppisar@redhat.com>
- Add new mandatory perl build deps
* Thu Jun 23 2016 Ville Skyttä <ville.skytta@iki.fi> - 8.7-1
- Update to 8.7
- Specfile cleanups
* Thu Feb 04 2016 Fedora Release Engineering <releng@fedoraproject.org> - 8.6-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
* Fri Jun 5 2015 Ville Skyttä <ville.skytta@iki.fi> - 8.6-2
- Use python3 on > F-22
* Sun May 10 2015 Ville Skyttä <ville.skytta@iki.fi> - 8.6-1
- Update to 8.6

View file

@ -1 +1 @@
daee90323a325efee01257c1e9c6aced rpmdevtools-8.6.tar.xz
SHA512 (rpmdevtools-9.6.tar.xz) = 691fec8944029dbe60cb3eab0200d1201f5aa3dd11cd49e8313ee7c1fe998237217ea9c5ae7b4a70f61f3c998093f23d26266b23f41607ddca3148d5f6b6ae06