SHA256
3
0
forked from pool/rpm

osc copypac from project:Base:System package:rpm revision:533

OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=535
This commit is contained in:
Michael Schröder 2020-03-24 20:44:25 +00:00 committed by Git OBS Bridge
parent 62612c4e57
commit 0943bab7a8
4 changed files with 116 additions and 150 deletions

View File

@ -3,20 +3,6 @@ Mon Mar 23 16:11:34 UTC 2020 - Sergio Lindo Mansilla <slindomansilla@suse.com>
- Add macro for supported ARM 64bit processors
-------------------------------------------------------------------
Fri Mar 13 08:26:58 UTC 2020 - Fabian Vogt <fvogt@suse.com>
- Replace rpmsort with rewrite using Lua (boo#1164553)
-------------------------------------------------------------------
Wed Feb 26 09:08:19 UTC 2020 - Fabian Vogt <fvogt@suse.com>
- Split out perl and python dep generators from rpm-build to avoid
pulling in perl and python in all RPM builds
- Port rpmconfigcheck to pure shell
- Refactor %files list of main package to not require %excludes
as those might lead to missing files in the package
-------------------------------------------------------------------
Fri Jan 17 11:27:17 CET 2020 - mls@suse.de

View File

@ -194,6 +194,7 @@ Requires: grep
Requires: gzip
Requires: make
Requires: patch
Requires: perl-base
Requires: sed
Requires: systemd-rpm-macros
Requires: tar
@ -203,9 +204,8 @@ Requires: xz
# drop candidates
Requires: cpio
Requires: file
# Mandatory generators
Requires: (%{name}-build-perl if perl-base)
Requires: (%{name}-build-python if python3-base)
# for pythondistdeps generator
Requires: python3-base
# The point of the split
Conflicts: rpm < 4.15.0
@ -213,22 +213,6 @@ Conflicts: rpm < 4.15.0
If you want to build a rpm, you need this package. It provides rpmbuild
and requires some packages that are usually required.
%package build-python
Summary: RPM dependency generator for Python
Group: Development/Languages/Python
Requires: python3-base
%description build-python
Provides and requires generator for .py files and modules.
%package build-perl
Summary: RPM dependency generator for Perl
Group: Development/Languages/Perl
Requires: perl-base
%description build-perl
Provides and requires generator for .pl files and modules.
%prep
%setup -q -n rpm-%{version}
rm -rf sqlite
@ -428,29 +412,24 @@ fi
%doc RPM-HOWTO
/etc/rpm
/bin/rpm
%{_bindir}/gendiff
%{_bindir}/rpm
%{_bindir}/rpm2cpio
%{_bindir}/rpmdb
%{_bindir}/rpmgraph
%{_bindir}/rpmkeys
%{_bindir}/rpmqpack
%{_bindir}/rpmquery
%{_bindir}/rpmsign
%{_bindir}/rpmverify
/usr/bin/*
%exclude /usr/bin/rpmbuild
%exclude %{_libdir}/librpmbuild.so.*
%exclude /usr/lib/rpm/elfdeps
%exclude /usr/lib/rpm/rpmdeps
%exclude /usr/lib/rpm/debugedit
%exclude /usr/lib/rpm/sepdebugcrcfix
%exclude /usr/bin/rpmspec
%exclude /usr/lib/rpm/*.prov
%exclude /usr/lib/rpm/*.req
%exclude /usr/lib/rpm/brp-*
%exclude /usr/lib/rpm/check-*
%exclude /usr/lib/rpm/*find*
%exclude /usr/lib/rpm/fileattrs/pythondist.attr
%exclude /usr/lib/rpm/pythondistdeps.py
/usr/sbin/rpmconfigcheck
/usr/lib/systemd/system/rpmconfigcheck.service
%dir /usr/lib/rpm
/usr/lib/rpm/macros
/usr/lib/rpm/macros.d/
/usr/lib/rpm/platform/
/usr/lib/rpm/rpm.supp
/usr/lib/rpm/rpmdb_*
/usr/lib/rpm/rpmpopt-*
/usr/lib/rpm/rpmrc
/usr/lib/rpm/rpmsort
/usr/lib/rpm/suse
/usr/lib/rpm/tgpg
/usr/lib/rpm
%{_libdir}/rpm-plugins
%{_libdir}/librpm.so.*
%{_libdir}/librpmio.so.*
@ -475,40 +454,19 @@ fi
%files build
%defattr(-,root,root)
/usr/bin/rpmbuild
/usr/lib/rpm/libtooldeps.sh
/usr/lib/rpm/pkgconfigdeps.sh
/usr/lib/rpm/pythondeps.sh
/usr/lib/rpm/elfdeps
/usr/lib/rpm/rpmdeps
/usr/lib/rpm/debugedit
/usr/lib/rpm/sepdebugcrcfix
/usr/bin/rpmspec
/usr/lib/rpm/*.prov
/usr/lib/rpm/*.req
/usr/lib/rpm/brp-*
/usr/lib/rpm/check-*
/usr/lib/rpm/*find*
/usr/lib/rpm/fileattrs/
%exclude /usr/lib/rpm/fileattrs/pythondist.attr
%exclude /usr/lib/rpm/fileattrs/perl*.attr
/usr/lib/rpm/*.prov
%exclude /usr/lib/rpm/perl.prov
/usr/lib/rpm/*.req
%exclude /usr/lib/rpm/perl.req
%ifarch aarch64 ppc64le riscv64
/usr/lib/rpm/config.guess
/usr/lib/rpm/config.sub
%endif
%files build-python
%defattr(-,root,root)
/usr/lib/rpm/fileattrs/pythondist.attr
/usr/lib/rpm/pythondistdeps.py
%files build-perl
%defattr(-,root,root)
/usr/lib/rpm/fileattrs/perl*.attr
/usr/lib/rpm/perl.prov
/usr/lib/rpm/perl.req
%files devel
%defattr(644,root,root,755)
/usr/include/rpm

View File

@ -13,11 +13,7 @@ if test -s $packages -a \( ! -e $configcheckfile -o -s $configcheckfile -o ! $pa
echo "Searching for unresolved configuration files"
if test ! -e $configcheckfile -o ! $packages -ot $configcheckfile ; then
test -e $configcheckfile && mv -f $configcheckfile $configcheckfile.old
rpm -qalc | sort | while read line; do
for suffix in new orig save; do
[[ -e "${line}.rpm${suffix}" ]] && echo "${line}.rpm${suffix}"
done
done > $configcheckfile
rpm -qalc | sort | perl -lne '-e "$_.rpmnew" and print "$_.rpmnew"; -e "$_.rpmorig" and print "$_.rpmorig"; -e "$_.rpmsave" and print "$_.rpmsave"' > $configcheckfile
else
mv -f $configcheckfile $configcheckfile.old
while read l; do

156
rpmsort
View File

@ -1,76 +1,102 @@
#!/bin/sh
# rpmsort implemented mostly in Lua
# Copyright (c) 2020 SUSE LLC
# SPDX-License-Identifier: GPL-2.0-or-later
# Author: fvogt@suse.de
# Enhanced by: mwilck@suse.com
#! /usr/bin/perl -w
rpmsort() {
direction=$1
script='
function parse(ver)
local epoch, version, release = 0, ver, 0
_, eend, e = ver:find("^(%d+):")
if eend then
ver = ver:sub(eend + 1)
version = ver
epoch = e
end
_, _, v, r = ver:find("(.+)%-(.+)$")
if v then
version = v
release = r
end
return epoch, version, release
end
# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
# USA.
function pkgvercmp(a, b)
local ae, av, ar = parse(a)
local be, bv, br = parse(b)
use Getopt::Long qw(:config gnu_getopt);
local ecmp = rpm.vercmp(ae, be)
if ecmp ~= 0 then return ecmp end
sub do_rpm_cmp_versions {
my ($evr1, $evr2) = @_;
local vcmp = rpm.vercmp(av, bv)
if vcmp ~= 0 then return vcmp end
sub _rpm_cmp {
my ($s1, $s2) = @_;
return rpm.vercmp(ar, br)
end
return defined $s1 <=> defined $s2
unless defined $s1 && defined $s2;
vers = {}
for line in io.stdin:lines() do
table.insert(vers, line)
end
table.sort(vers, function(a, b) return pkgvercmp(a, b) == '"$direction"' end)
print(table.concat(vers, "\n"))
'
rpm --eval "%{lua: ${script}}"
my ($r, $x1, $x2);
do {
$s1 =~ s/^[^a-zA-Z0-9]+//;
$s2 =~ s/^[^a-zA-Z0-9]+//;
if ($s1 =~ /^\d/ || $s2 =~ /^\d/) {
$s1 =~ s/^(0*(\d*))//; $x1 = $2;
return -1 if $1 eq '';
$s2 =~ s/^(0*(\d*))//; $x2 = $2;
return 1 if $1 eq '';
$r = length $x1 <=> length $x2 || $x1 cmp $x2;
} else {
$s1 =~ s/^([a-zA-Z]*)//; $x1 = $1;
$s2 =~ s/^([a-zA-Z]*)//; $x2 = $1;
return 0
if $x1 eq '' && $x2 eq '';
$r = $x1 cmp $x2;
}
} until $r;
return $r;
}
usage() {
cat >&2 <<EOF
$0 - sort input according to rpm version sorting conventions
Expects rpm package versions separated by newlines as input and outputs
them sorted according to rpm version sorting conventions, with old versions
at the top.
Options:
-r|--reverse sort backwards
-h|--help print this help
EOF
exit 0
my ($e1, $v1, $r1) = $evr1 =~ /^(?:(\d*):)?(.*?)(?:-([^-]*))?$/;
my ($e2, $v2, $r2) = $evr2 =~ /^(?:(\d*):)?(.*?)(?:-([^-]*))?$/;
my $r = _rpm_cmp($e1 || 0, $e2 || 0);
$r = _rpm_cmp($v1, $v2)
unless $r;
$r = _rpm_cmp($r1, $r2)
unless $r;
return $r;
}
DIRECTION=-1
while [ $# -gt 0 ]; do
case $1 in
-r|--reverse) DIRECTION=1;;
-h|--help) usage;;
*) echo "$0: invalid parameter $1 ignored" >&2;;
esac
shift
done
my $reorder = sub { return @_ };
my $key = 0;
my $test = 0;
rpmsort "$DIRECTION"
sub rpm_cmp_versions {
my ($evr1, $evr2) = @_;
chomp($evr1, $evr2);
my $res1 = do_rpm_cmp_versions($evr1, $evr2);
if ($test) {
open(my $fd, '-|', 'zypper', '--terse', 'versioncmp',
$evr1, $evr2) or die "zypper: $!\n";
my $res2 = <$fd>;
close($fd) or die "zypper: $!\n";
chomp $res2;
if ($res1 != $res2) {
my @operators = qw(< == >);
my $op1 = $operators[$res1 + 1];
my $op2 = $operators[$res2 + 1];
print STDERR "BUG: $evr1 $op1 $evr2 vs. zypper: $evr1 $op2 $evr2\n";
}
}
return $res1;
}
GetOptions ("r|reverse" => sub { $reorder = sub { return reverse @_ } },
"k|key=i" => \$key,
"test" => \$test)
or do {
print STDERR "Usage $0 [-r, --reverse] [-k N, --key=N] [--test]\n";
exit 1;
};
if ($key == 0) {
# Sort by entire lines
map { print } &$reorder(sort { rpm_cmp_versions($a, $b) } <>);
} else {
# Sort by field $key
my @data = map { [(split)[$key-1], $_] } <>;
map { print } &$reorder(map { $_->[1] }
sort { rpm_cmp_versions($a->[0], $b->[0]) } @data);
}