Compare commits

..

No commits in common. "rawhide" and "f20" have entirely different histories.

6 changed files with 41 additions and 949 deletions

View file

@ -1,39 +0,0 @@
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

@ -1,531 +0,0 @@
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

View file

@ -1,133 +0,0 @@
#!/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

@ -1,21 +0,0 @@
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,63 +1,46 @@
%global spectool_version 1.0.10
Name: rpmdevtools Name: rpmdevtools
Version: 9.6 Version: 8.4
Release: 13%{?dist} Release: 2%{?dist}
Summary: RPM Development Tools Summary: RPM Development Tools
# rpmdev-md5 and rpmdev-setuptree are GPL-2.0-only, # rpmdev-setuptree is GPLv2, everything else GPLv2+
# everything else is GPL-2.0-or-later. License: GPLv2+ and GPLv2
License: GPL-2.0-or-later AND GPL-2.0-only URL: https://fedorahosted.org/rpmdevtools/
URL: https://pagure.io/rpmdevtools Source0: https://fedorahosted.org/released/rpmdevtools/%{name}-%{version}.tar.xz
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 BuildArch: noarch
# help2man, pod2man, *python for creating man pages # help2man, pod2man, *python for creating man pages
BuildRequires: make
BuildRequires: help2man BuildRequires: help2man
BuildRequires: %{_bindir}/pod2man BuildRequires: %{_bindir}/pod2man
BuildRequires: perl-generators BuildRequires: python >= 2.4
# python dependencies for spectool BuildRequires: rpm-python
# 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 # emacs-common >= 1:22.3-3 for macros.emacs
BuildRequires: emacs-common >= 1:22.3-3 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: curl
Requires: diffutils Requires: diffutils
%if ! 0%{?rhel}
Requires: fakeroot Requires: fakeroot
%endif
Requires: file Requires: file
Requires: findutils Requires: findutils
Requires: gawk Requires: gawk
Requires: grep Requires: grep
Requires: python >= 2.4
Requires: rpm-build >= 4.4.2.3 Requires: rpm-build >= 4.4.2.3
Requires: python3dist(argcomplete) Requires: rpm-python
%if ! 0%{?rhel}
Requires: python3dist(progressbar2)
%endif
Requires: python3dist(requests)
Requires: python3dist(rpm)
Requires: sed Requires: sed
Requires: emacs-filesystem Requires: emacs-filesystem
# Optionally support rpmautospec %if 0%{?fedora}
Recommends: python%{python3_version}dist(rpmautospec) Requires: xemacs-filesystem
%endif
%description %description
This package contains scripts and Emacs support files to aid in This package contains scripts and (X)Emacs support files to aid in
development of RPM packages. development of RPM packages.
rpmdev-setuptree Create RPM build tree within user's home directory rpmdev-setuptree Create RPM build tree within user's home directory
rpmdev-diff Diff contents of two archives rpmdev-diff Diff contents of two archives
@ -67,7 +50,7 @@ rpmdev-checksig Check package signatures using alternate RPM keyring
rpminfo Print information about executables and libraries rpminfo Print information about executables and libraries
rpmdev-md5/sha* Display checksums of all files in an archive file rpmdev-md5/sha* Display checksums of all files in an archive file
rpmdev-vercmp RPM version comparison checker rpmdev-vercmp RPM version comparison checker
rpmdev-spectool Expand and download sources and patches in specfiles spectool Expand and download sources and patches in specfiles
rpmdev-wipetree Erase all files within dirs created by rpmdev-setuptree rpmdev-wipetree Erase all files within dirs created by rpmdev-setuptree
rpmdev-extract Extract various archives, "tar xvf" style rpmdev-extract Extract various archives, "tar xvf" style
rpmdev-bumpspec Bump revision in specfile rpmdev-bumpspec Bump revision in specfile
@ -75,213 +58,46 @@ rpmdev-bumpspec Bump revision in specfile
%prep %prep
%autosetup -N %setup -q
%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 %build
%configure --libdir=%{_prefix}/lib %configure --libdir=%{_prefix}/lib
%make_build make %{?_smp_mflags}
%install %install
%make_install rm -rf $RPM_BUILD_ROOT
echo %%{_datadir}/bash-completion > %{name}.files make install DESTDIR=$RPM_BUILD_ROOT
[ -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 for dir in %{_emacs_sitestartdir} ; do
install -dm 755 %{buildroot}$dir %endif
ln -s %{_datadir}/rpmdevtools/rpmdev-init.el %{buildroot}$dir install -dm 755 $RPM_BUILD_ROOT$dir
touch %{buildroot}$dir/rpmdev-init.elc ln -s %{_datadir}/rpmdevtools/rpmdev-init.el $RPM_BUILD_ROOT$dir
touch $RPM_BUILD_ROOT$dir/rpmdev-init.elc
done 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} %files
cp %{SOURCE1} %{buildroot}%{_datadir}/rpmdevtools/ %doc COPYING NEWS
%py_byte_compile %{python3} %{buildroot}%{_datadir}/rpmdevtools/
%endif
%files -f %{name}.files
%license COPYING
%doc NEWS
%config(noreplace) %{_sysconfdir}/rpmdevtools/ %config(noreplace) %{_sysconfdir}/rpmdevtools/
%{_sysconfdir}/bash_completion.d/
%{_datadir}/rpmdevtools/ %{_datadir}/rpmdevtools/
%{_bindir}/* %{_bindir}/*
%{_emacs_sitestartdir}/rpmdev-init.el %{_emacs_sitestartdir}/rpmdev-init.el
%ghost %{_emacs_sitestartdir}/rpmdev-init.elc %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]* %{_mandir}/man[18]/*.[18]*
%changelog %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
* Mon Oct 20 2014 Ville Skyttä <ville.skytta@iki.fi> - 8.5-1
- Update to 8.5
- Mark COPYING as %%license where applicable
* Sun Jun 08 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 8.4-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
* Thu Oct 17 2013 Ville Skyttä <ville.skytta@iki.fi> - 8.4-2 * Thu Oct 17 2013 Ville Skyttä <ville.skytta@iki.fi> - 8.4-2
- Do not require devscripts in any scenario. - Do not require devscripts in any scenario.

View file

@ -1 +1 @@
SHA512 (rpmdevtools-9.6.tar.xz) = 691fec8944029dbe60cb3eab0200d1201f5aa3dd11cd49e8313ee7c1fe998237217ea9c5ae7b4a70f61f3c998093f23d26266b23f41607ddca3148d5f6b6ae06 9d1d3cc2f1108918be4766143162389a rpmdevtools-8.4.tar.xz